【发布时间】:2012-09-10 00:13:06
【问题描述】:
目前,我正在开发我的第一个网站。现在,我正在实现 PHP 的 MySQL 扩展。然而,从我一直在阅读的内容来看,使用 PHP 的 PDO 将是一种更好的方法,原因有很多,例如使用占位符等等。
在浏览了一些代码之后,我对一些事情感到好奇。例如,假设我创建了一个连接和查询:
$pdo = new PDO('mysql:host=localhost;dbname=something','root','abc');
$sql="select id from users where username = :username and password = :password";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(":username",$_POST['username']);
$stmt->bindParam(":password",$_POST['password']);
$stmt->execute();
首先,$stmt->execute();实际执行整个查询?如果是这样,为什么?如果是这种情况,我的假设是,在某种程度上,它本质上与准备好的语句相关联,因此它绑定到准备好的 sql 语句。
此外,很明显准备好的语句可以更好地防止 sql 注入。我的问题是什么时候在 PDO 中清理了用户输入。为了解释,在 MySQL 扩展中,诸如 mysql_real_escape_string() 之类的函数必须在清理时进行硬编码。
如果使用 MySQL 扩展时不存在使用 PDO 的任何其他复杂性,我很想知道。
感谢任何反馈。
【问题讨论】:
-
请问为什么我被否决了?在我看来,这是建设性的。
-
“如果是这样,为什么?” --- 因为你调用了它?
-
这不是问题,为什么执行 $stmt->execute() 会导致整个函数执行。该语法与简单执行相比有什么意义>
-
你了解对象的工作原理吗?
-
@Mlagma:因为你没有绑定也不能绑定参数到字符串,而且字符串没有
execute()方法,因为它本质上不是SQL语句?