【问题标题】:Insert value to MySQL table safely using PDO使用 PDO 安全地将值插入 MySQL 表
【发布时间】:2013-06-13 02:16:36
【问题描述】:

这会保护我的 INSERT 免受 SQL 注入吗?我可以以某种方式缩短此代码以使其看起来更整洁吗?

$db = new PDO('mysql:host=XXXXXXXXXX;dbname=XXXXXXXXX', 'XXXXXXXXX', 'XXXXXXXXXX');

// query MySQL to verify login
$query = $db->prepare("INSERT INTO login (username,password,name,email_add,age,country) VALUES (:username,:password,:name,:email_add,:age,:country)");
$query->execute(array(
':username' => $username, 
':password' => $password,
':name' => $name,
':email_add' => $email,
':age' => $age,
':country' => $country));

【问题讨论】:

  • 我们绝对需要一个全部大写“是的”的参考答案。
  • 来吧,我很乐意接受两个答案:)
  • 你实际上不能接受两个。但无论如何,重点是不同的。
  • 哦,我想我可以,因为我以前见过双倍的。不过,感谢您让我们知道,Starx 编辑了他的帖子!

标签: mysql pdo insert code-injection


【解决方案1】:

是的, PDO 扩展已经消除了所有类似的注入漏洞。由于您在病房后绑定参数,因此您也正确地执行了它。

但是,为了使查询处于最安全的状态,请在绑定变量时指定变量的数据类型。

$query = $db->prepare('INSERT INTO login (username,password,name,email_add,age,country) VALUES (:username,:password,:name,:email_add,:age,:country)');

$query->bindParam(':username', $username, PDO::PARAM_STR, 20);
// and so on
$query -> execute();

More Details

【讨论】:

  • 你有我如何指定数据类型的例子吗?感谢您这么快的反馈。
  • @FriedBitz,我正在更新我的答案。请再次检查。
  • 那么我如何让它作为一个数组执行,或者是一个在你使用 BindParam 时内置的函数?
  • @FriedBitz,就像$query -> execute() 我再次更新了我的答案。
  • 奥凯,谢谢!冷却时间结束后我会接受答案。同时,我是否也将年龄作为字符串?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 2015-05-21
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多