$stmt_update = $db->prepare("UPDATE 2_1_journal SET RecordDay = ?, WHERE Number = ? ");
$stmt->execute(array($amount1, $date_day1));
これは mysql インジェクションに対して安全ですか?
安全であれば、私が理解しているように、「= ?」が原因です。次に、どのように「= ?」と質問します。働く/助ける
ここにhttp://php.net/manual/en/pdo.prepare.phpと書いてあるので質問です
準備されたステートメントは、bindParam または bindValue オプションを使用する場合にのみ、SQL インジェクションからあなたを予測します。
たとえば、username と email の 2 つのフィールドを持つ users というテーブルがあり、誰かが自分のユーザー名を更新した場合、次のコマンドを実行できます。
UPDATE `users` SET `user`='$var'
$var は、ユーザーが送信したテキストです。
今あなたがした場合
<?php $a=new PDO("mysql:host=localhost;dbname=database;","root",""); $b=$a->prepare("UPDATE `users` SET user='$var'"); $b->execute(); ?>
ユーザーが User', email='test と入力すると、インジェクションが発生し、メールがテスト用に更新され、ユーザーが User に更新されます。
私のコード (上記) には、bindParams も bindValue もありません。したがって、安全かどうかはわかりません。安全である場合は、コードのどの部分がそれを保証しますか。ご意見をお聞かせください
アップデート
これを読んだ後、PHPでSQLインジェクションを防ぐにはどうすればよいですか? もう1つ質問があります
このコードは
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->execute(array($name));
これと同じ?
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
$stmt->execute(array(':name' => $name));
はいの場合、短いので最初のコードを使用する方が良いと思われますか?