在bindParam中使用LIKE进行MySQL PDO查询

Dan*_*Dan 18 php mysql database pdo

我已经阅读了关于如何编写这些查询的多个示例,但我正在努力使这个特定的类似于在使用时运行 bindParam

这是匹配以a开头的用户名的正确方法吗?

$term = "a";
$term = "'$term%'";

$sql = "SELECT username 
        FROM `user` 
        WHERE username LIKE :term 
        LIMIT 10";      

$core = Connect::getInstance();

$stmt = $core->dbh->prepare($sql);
$stmt->bindParam(':term', $term, PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud)

Har*_*hof 26

不,你不需要内部单引号 $term = "$term%";

您现在正在运行的声明将尝试匹配'a%'而不是a%

bindParam将确保在给予SQL语句时自动正确引用所有字符串数据.

  • 这是示例代码:https://gist.github.com/arsho/a203e7bc156ea566587361a76038f020 (2认同)

Dip*_*Dip 6

您可以使用 bindValue ,假设您有一个$query = "search string"

$stmt->bindValue(':term', $query.'%'); // this will do like search for "search term XXXXX"
Run Code Online (Sandbox Code Playgroud)

相似地

$stmt->bindValue(':term', '%'.$query.'%');
Run Code Online (Sandbox Code Playgroud)

或者

$stmt->bindValue(':term', '%'.$query);
Run Code Online (Sandbox Code Playgroud)