PHP预处理语句是否允许使用通配符?

时间:2013-07-25 18:04:03

标签: php mysql prepared-statement wildcard

我正在使用AJAX将用户的输入发送到PHP脚本。 PHP脚本显示MySQL表中的记录。

如果用户输入通配符(%),则会列出数据库中的所有记录。

从编码的角度看,这样可以吗?应该允许%字符?或者我的代码可能错了吗?

我真的不关心用户体验,实际上这可能是一个很好的功能,但我想知道这是否是准备好的语句的正常行为


...
$stmt = $dbh->prepare("SELECT * FROM tblStudent where lastNameStudent LIKE ?");
$stmt->bindParam(1, $lastname, PDO::PARAM_STR);
$stmt->execute();
...

当我设置$lastname='%'时,我会获得tblStudent表中的所有记录。

1 个答案:

答案 0 :(得分:3)

  

从代码的角度来看,这样可以吗?

  

应该允许%char吗?

没有错。至少从安全的角度来看。

说到应用程序逻辑 - 它取决于。如果您想要按字面搜索它,可以转义此字符,如果您想将其用作通配符,则可以不转义。

此行为与准备好的陈述无关 准备好的语句只是将变量放入查询的一种方法。这个变量的内容与其无关。