繁体   English   中英

SQL查询绑定变量与指定变量

[英]Sql queries binding variables vs specifying them

我在mySql中创建一个简单的查询,以将表单中的某些值插入到我的数据库中。

我的问题很简单,但是要参考绑定变量与在sql语句中指定变量之间的区别。

捆绑:

$query = "INSERT INTO test (name, lastName, price) VALUES (:name, :lastName, :price)";
$apply = $con -> prepare($query);
$apply -> execute (array(':name'=>$name,':lastName'=>$lastName,':price=>$price'));

典型:

$query = "INSERT INTO test (name, lastName, price) VALUES ($name, $lastName, $price)";
Execute the query....

即使对于上述简单情况,是否真的建议使用Binding选项? 这是为什么?

谢谢!

尽管您可以使查询完全安全而无需绑定(通过手动格式化所有变量),但是使用准备好的语句在查询中表示数据确实是唯一正确的方法。

使用准备好的语句的重要性常常被错误地判断,因此,我想澄清一下真正的好处:

  • 准备好的语句使正确的格式化(或处理)成为必然
  • 准备好的语句在唯一合适的位置进行正确的格式设置(或处理)-就在查询执行之前,而不是在其他地方,因此,我们的安全将不会依赖于诸如
    • 一些PHP的“魔术”功能,它破坏了数据而不是确保数据安全。
    • 一个(或几个)程序员的好意愿,他们可以决定在程序流中某个地方格式化(或不格式化)我们的变量。 这是非常重要的一点。
  • 准备好的语句会影响将要查询的值,但不会影响源变量,源变量保持不变,可以在其他代码中使用(通过电子邮件发送或在屏幕上显示)。
  • 准备好的语句可以使应用程序代码大大缩短,在后台进行所有格式设置(*仅在驱动程序允许的情况下)。

这是必要的,因为您具有用户定义的值,并且用户可以轻松操纵它们,以破坏查询结构并执行不需要的命令。

如果仅由服务器处理数据,则没有必要。 但是,由于它使用来自超级全局变量的数据,用户可以操纵这些数据(cookie,会话,发布,获取,请求...),因此这是必须的。

因为它更安全。

如果使用用户数据填充了三个变量,则无需清理输入。 另外,如果需要多次重复该查询,则总体执行速度应该更快。

我个人认为,几个月后不得不再次读取查询时,它更易于阅读和调试...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM