sql >> データベース >  >> RDS >> Mysql

PDOは生のクエリをMySQLに送信し、Mysqliは準備されたクエリを送信します。どちらも同じ結果を生成します

    PDOは準備されたクエリをエミュレートするように構成されていますが、mysqliは真の準備されたクエリを使用しています。

    準備されたクエリは、文字列''1''をバインドします 整数パラメータ値として。 PHPは、intval()などを使用して整数に強制します 。数値以外の先頭文字を含む文字列は、PHPによって0として解釈されるため、パラメータ値は afterに送信されます。 prepareは値0です。

    偽の準備されたクエリは文字列補間を使用します (バインドする代わりに)文字列''1''を追加します のSQLクエリに MySQLはそれを解析します。ただし、SQLは整数コンテキストで数字以外の先頭文字を含む文字列も値0として扱うため、結果は同様です。

    唯一の違いは、パラメータが準備前と準備後にバインドされたときに、一般的なクエリログに記録される内容です。

    PDOに実際に準備されたクエリを使用させることもできるため、この場合はmysqliと同じように動作する必要があります。

    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    

    PS:これは、id値を0ではなく1から開始するのが通例である理由を示している可能性があります。




    1. MySQLは、ユーザーが見たテーブルをチェックすることからすでに見た行を省略します

    2. MYSQLは年齢範囲に基づいて誕生日を選択します

    3. 最後に挿入されたIDを取得するJavaPreparedStatement

    4. シェルコマンドでmysqlデータベースを削除する方法