3

PREPARESQLステートメントでおよびを使用するとEXECUTE、ユーザーが指定したデータがSQLインジェクションに対応できないものにサニタイズされると聞いています。これは本当ですか?

私の元のクエリはこれです:

$query = 
"SELECT * FROM sales_orders 
WHERE ksisoldby ILIKE '".$user."'";

これは、prepare/executeステートメントに変更するための私の最善の推測です。

 <?php
$id = $_POST['id'];
$search = $_POST['user_supplied_search_term'];

PREPARE search_query_function (varchar, varchar) AS

SELECT * FROM sales_orders 
WHERE ksisoldby ILIKE '$1'";

EXECUTE search_query_function($id, $search);
?>

これは正しく書かれ/呼び出されていますか?PDO私が読んだいくつかの組み込みのphpオブジェクト( )もあります。代わりに、または組み合わせてそれらを使用する必要がありますか?この種の幅広い質問について助けてくれてありがとう。

4

2 に答える 2

5

を使用するときに使用できる準備済みステートメントを使用して、 PHP にprepare()とを組み込みます。この拡張機能は、選択したデータベース ドライバに従って、データベースに適切なandステートメントを作成する役割を果たします。execute()PDOPREPAREEXECUTE

以下は、とを使用して PHP マニュアルから変更された例です。prepare()execute()

$sth = $dbh->prepare('SELECT * FROM sales_orders 
    WHERE ksisoldby ILIKE ?');
$sth->execute( array( $_POST['user_supplied_search_term']));

これにより、パラメーターのエスケープが処理され、次のような SQL ステートメントが作成されます。

SELECT * FROM sales_orders 
    WHERE ksisoldby ILIKE 'something'

そのため、上記のコードを調整して への呼び出し内に SQL ステートメントを含めるprepare()必要があります。これには、パラメーターを含めたい場所にプレースホルダーを追加する必要があります。execute()次に、渡された値を追加するを呼び出します。

于 2012-07-16T16:58:43.543 に答える
1

使いやすく安全なpg_query_paramsを使用することもできます。

于 2012-07-17T04:59:48.283 に答える