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

プリペアドステートメントの内部はどのようなものですか?

    あなたがやろうとしているように聞こえることをやろうとしているのなら...そうしようとしないでください。

    それは準備されたステートメントが何であるかではありません(または少なくともそれはそれがどうあるべきかではありません)。

    クライアントコードは、実行のためにサーバーに送信する「終了した」クエリを生成するために、クエリ文字列に値を補間しようとしてはなりません。それは、誤った安心感は言うまでもなく、災害のレシピです。

    プリペアドステートメントは、?を使用してステートメントを配信します サーバーへのプレースホルダーはそのままで、サーバーは実行のためにステートメントを「準備」します...次に、クライアントは実行のためにパラメーターをサーバーに送信します(パラメーターを「バインド」します)。これにより、サーバーは「どの部分がSQLであるか」と「どの部分がデータであるか」について混乱することはなく、SQLインジェクションが不可能になり、データのエスケープとサニタイズが不要になります。

    C-APIと直接通信していない場合は、同じ関数を公開するライブラリ内のメソッドを呼び出す必要があります。




    1. SQLite Group By

    2. mysqlエラー'TYPE=MyISAM'

    3. UTF-8とJPAおよびGlassfish4.0

    4. MySQL 4.1.x + Connector/Jを使用した大規模な結果セットのストリーミング