我通常使用mysql_query()从mysql数据库中获取数据。但有些人使用绑定来设置结果。那之间有什么不同?在我看来,两者都给出了相同的结果。但我觉得绑定有点复杂。任何人都可以请问使用bind有什么好处?谢谢。
答案 0 :(得分:1)
数据绑定提供针对SQL注入攻击(有时称为SQLIA)的增强保护。 SQL注入是出于预期用途之外的原因而恶意尝试访问您的数据库。在这里运用你的想象力。因此,使用mysql_connect
是一个非常糟糕的主意和library is deprecated as of PHP 5.5.0。有关更全面的概述,请参阅this article。
绑定并不像在分解SQL查询时那样复杂,它可以很容易地解释。
以旧mysql
库中的以下代码为例:
mysql_query(
"INSERT INTO users (username, password, user_data) VALUES ('derek_jeter', 'password', 'additional_data')"
);
此代码易受SQLIA攻击。使用像PDO这样的库,您只需添加一个额外的步骤即可完全避免此问题。要在更安全的库中实现相同的结果,您只需将上述代码转换为以下代码:
$db->prepare("INSERT INTO users (username, password, user_data) VALUES (:username, :password, :additional_data)";
$db->execute(
array("username" => "derek_jeter", "password" => "password", "additional_data" => "additional_data")
);
绑定将要插入MySQL的数据与查询分开发送,并了解如何解析插入数据而不会危及数据库的安全。使用execute
函数,您只需使用与您在prepare
函数中定义的占位符数据相对应的键传递数组。
注意:我使用的是" function",但由于PDO库实际上是您操作的对象,因此PDO类中包含的函数在技术上称为"方法&#34 ;.
在您可以在PDO中运行查询(例如实例化PDO连接和类)之前,您还需要做更多的事情,但我会将您推荐给{{3} }。