使用";%时PHP PDO准备引发异常&引用;

使用";%时PHP PDO准备引发异常&引用;,php,sql,sqlite,pdo,Php,Sql,Sqlite,Pdo,下面的行抛出一个异常- $sth = $db->prepare("SELECT * FROM providers WHERE name LIKE %:name%"); 致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY000]:一般错误:1靠近“%”:语法错误 去掉%符号可以消除错误,但显然搜索没有按我所希望的那样工作。我尝试过使用引号,输入一个实际值,而不是带:-前缀的PDO变量,唯一能消除错误的是删除%符号。我不知所措。像这样的操作符获取一个字符串: $

下面的行抛出一个异常-

$sth = $db->prepare("SELECT * FROM providers WHERE name LIKE %:name%");
致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY000]:一般错误:1靠近“%”:语法错误


去掉%符号可以消除错误,但显然搜索没有按我所希望的那样工作。我尝试过使用引号,输入一个实际值,而不是带:-前缀的PDO变量,唯一能消除错误的是删除%符号。我不知所措。

像这样的
操作符获取一个字符串:

$db->prepare("SELECT * FROM providers WHERE name LIKE '%' + :name + '%'");
请注意,空的
:name
将匹配所有内容(
'%%'

Sqlite使用
| |
连接字符串,因此
'%'| |:name |'%'
应该可以


另一种方法(取自)是将百分号添加到参数的值中。因此,您需要一个查询
,比如:name
,然后在绑定参数之前,添加百分号:
$name='%'。$name'%'$sth->execute(数组('name'=>$name))

@RoyalBg,这对我一点帮助都没有。我的参数直接来自$\u帖子,修改它似乎不是一个好的解决方案。Knittl在查询中用引号括起%符号并将它们与| |连接起来的答案正是我需要的答案。你一开始没有提到:)谢谢!这成功了!实际上,我想说这可能是我迄今为止对stackoverflow的最好体验。几个小时后,我的头撞在桌子上,在发帖后的头两分钟内得到一个可行的答案。如果不是让我等了15分钟才被允许检查你的答案为“已接受”就好了。