pdo 使用通配符准备语句
Posted
技术标签:
【中文标题】pdo 使用通配符准备语句【英文标题】:pdo prepared statements with wildcards 【发布时间】:2013-04-21 18:17:39 【问题描述】:我想执行下面的mysql查询:
SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'
我试过这个没有成功:
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name");
$stmt->bindParam(':name', "%" . $name . "%");
$stmt->execute();
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'");
$stmt->bindParam(':name', $name);
$stmt->execute();
所以我问你是否可以在准备好的语句中使用 % 通配符。
/编辑
谢谢。它与bindValue
合作:
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name");
$stmt->bindValue(':name', '%' . $name . '%');
$stmt->execute();
【问题讨论】:
第一次尝试 - 将bindParam
更改为bindValue
并转为error reporting for PDO
As an alternative to the given answer 你也可以使用MySQL CONCAT function
【参考方案1】:
它也可以通过以下方式与绑定参数一起使用:
$name = "%$name%";
$query = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` like :name");
$query->bindParam(':name', $name);
$query->execute();
【讨论】:
不知道为什么这被否决但请注意这个解决方案也有效。 :) 我猜它被否决了,因为如果您的$name
本身包含通配符,它不会被转义。
我浪费时间在 DSN 中没有 charset=utf8,我用泰语字符搜索。
是否需要反引号?【参考方案2】:
这可能是另一种选择:
$className = '%' . $this->className . '%';
$query->bind_param('s', $className);
【讨论】:
以上是关于pdo 使用通配符准备语句的主要内容,如果未能解决你的问题,请参考以下文章