使用 MySQL

第二种选择是为 MySQL 实现 MySQLi,如下所示:

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name);//'s' specifies the variable type => 'string'
$stmt->execute(); 
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
     //Do something with $row
}

但是,通用方法是使用 PDO,如上所示。
正确设置连接至关重要。
使用 PDO 访问 MySQL 数据库时,默认情况下不应用真正的准备好的语句。
为了解决这个问题,有必要禁用准备好的语句的模拟。
下面的示例演示了创建与 PDO 连接的正确方法:

$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8','user', 'password'); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);

其中错误模式不是必须的,但强烈推荐。
这样,一旦出现故障,脚本将不会被致命错误阻止。
有了它,开发人员就有机会捕获作为 PDOException 抛出的任何错误。

但是,第一行 setAttribute() 是强制性的。
它用于告诉 PDO 使用真正的准备来停用模拟的准备好的语句。
这可确保在将值和语句发送到 MySQL 服务器之前,PHP 不会对其进行解析。

如何在 PHP 中防止 SQL 注入

使用 PDO

我们推荐的第一个选项是像这样使用 PDO:

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
$stmt->execute([ 'name' => $name ]);
foreach ($stmt as $row) {
   //Do something with $row 
}

什么是 SQL 注入

这是一种将恶意 SQL 代码从前端输入字段传递到数据库驱动应用程序后端的技术。
所有现代应用程序都被认为是数据库驱动的。
这意味着用户应该登录才能正确使用应用程序的功能。
当要求用户输入用户名和密码时,就会发生 SQL 注入。
取而代之的是,用户发送一条 SQL 语句,该语句可能会在数据库上不知不觉地运行。

下面将介绍在PHP中如何防止SQL 注入

日期:2020-06-02 22:15:51 来源:oir作者:oir