什么是PHP和MySQL绑定?它的用途是什么?

时间:2014-09-12 13:57:58

标签: php mysql binding

我通常使用mysql_query()从mysql数据库中获取数据。但有些人使用绑定来设置结果。那之间有什么不同?在我看来,两者都给出了相同的结果。但我觉得绑定有点复杂。任何人都可以请问使用bind有什么好处?谢谢。

1 个答案:

答案 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} }。

另外,the docs which explain everything in great detail