[英]Escaping strings
我使用的是PDO,给人的印象是准备转义的撇号,但我看到情况并非如此。 如何使用我的字符串转义撇号?
$sql = 'SELECT test FROM test WHERE id = :id';
$sth = $dbh->prepare($sql);
$sth->execute(array(':id' => 1));
$red = $sth->fetchAll();
我不确定我是否理解您的问题,但这可能有助于PDO转义:
PDO::quote($data)
我怀疑您没有正确使用准备好的语句,或者您的代码有问题。
该文档特别指出:
准备好的语句的参数不需要用引号引起来。 驱动程序会自动处理。 如果应用程序仅使用准备好的语句,则开发人员可以确保不会发生SQL注入(但是,如果使用未转义的输入来构建查询的其他部分,则仍然可以进行SQL注入)。
我怀疑您可能正在使用准备好的语句,但是您没有绑定参数。 例如,代替
$val = "Some string with an a'postrophe in it";
$stmt = $pdo->prepare("UPDATE table SET col = '$val'");
$stmt->execute();
你应该用
$val = "Some string with an a'postrophe in it";
$stmt = $pdo->prepare('UPDATE table SET col = :val');
$stmt->bindParam('val', $val);
$stmt->execute();
或至少
$val = "Some string with an a'postrophe in it";
$stmt = $pdo->prepare('UPDATE table SET col = :val');
$stmt->execute(array('val' => $val));
这使用命名参数,但是您也可以使用?
使用位置参数?
作为占位符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.