$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 注入中投影出来。
例如,如果您有一个名为 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 注入?还有一个问题
这段代码
$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));
如果是,那么似乎最好使用第一个代码,因为它更短?