わかりました、まだよくわかりません。MySQLクエリを適切にエスケープするにはmysqli_prepare()
、 andを使用する必要があることを読み続けていますmysqli_bind_param()
。
私はこのセットアップを使用してみましたが、率直に言って、少し扱いにくいです。二度と変数を参照する必要がないのに、参照渡しで変数を渡すのに行き詰まっており、同じタスクを達成するのにコード行が増えるだけです。
私は違いが何であるかを理解していないと思います:
<?php
$sql = new \MySQLi(...);
$result = $sql->query('
UPDATE `table`
SET
`field` = "'.$sql->real_escape_string($_REQUEST[$field]).'";
');
?>
と
<?php
$sql = new \MySQLi(...);
$stmt = $sql->prepare('
UPDATE `table`
SET
`field` = ?;
');
$value = $_REQUEST[$field];
$stmt->bind_param('s', $value);
$stmt->execute();
$result = $stmt->get_result();
unset($value);
?>
より多くのコード以外。
つまり、人々が値をクエリで送信する前にエスケープすることを忘れないように、これを実装したのでしょうか? それともどういうわけか速いですか?
それとも、同じクエリを繰り返し使用する場合はこの方法を使用し (amysqli_stmt
は再利用できるため)、それ以外の場合は従来の方法を使用する必要がありますか?