我正在构建简单的查询构建器,我有两个问题:
是否可以将具有正常功能的mysql查询保护到与使用->execute(array(':param:' => ...
完成相似的级别?
是否可以在一个查询中使用多个变量,给它们指定相同的名称(分号后面的名称),然后逐个绑定它们?
答案 0 :(得分:2)
如果我理解正确,您想知道是否可以使用标准bindParam
函数复制mysql_*
的功能?
简短回答否。请完全不要使用mysql函数,使用mysqli
或PDO
,因为它们为prepared statements
提供了真正的安全性。它们还可以提供更好的查询性能,因为SQL可以针对数据库进行预优化。
您必须单独定义每个参数(即使它是相同的值)。您也可以将一个简单数组传递给execute()
方法调用,但是您没有明确定义参数类型的选项。
在你的函数中使用这样的东西:
$name = "fred";
$statement = $pdo->prepare("SELECT id FROM contacts WHERE first_name = ? OR last_name = ?");
for ($x = 1; $x <= 2; $x++) {
$statement->bindParam($x, $name, PDO::PARAM_STR);
}
$statement->execute();