将%通配符添加到我的SQL查询会导致语法错误

时间:2016-11-11 18:26:44

标签: sql

我有这个脚本:

$sql4='SELECT prod_name,description,price,in_stock,plat_name,genre_name FROM product WHERE prod_name LIKE %:prodname%';
$query5=$db->prepare($sql4);
$query5->execute(array(':prodname'=> $_GET['product']));
$result2=$query5->fetch(PDO::FETCH_ASSOC);

它给了我这个错误:

  

致命错误:未捕获的异常' PDOException' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MariaDB服务器版本相对应的手册,以获得正确的语法,以便在附近使用'%'%text'%'

我知道这些百分号是问题所在。如果我删除它们代码工作正常,但我如何让这些符号一起工作?我需要它们,因为我想选择包含给定字符串的所有记录。

1 个答案:

答案 0 :(得分:3)

您应该尝试编写如下代码:

$sql4='SELECT prod_name,description,price,in_stock,plat_name,genre_name FROM product WHERE prod_name LIKE :prodname';
$query5=$db->prepare($sql4);
$query5->execute(array(':prodname'=> '%'.$_GET['product'].'%'));
$result2=$query5->fetch(PDO::FETCH_ASSOC);

现在,PHP将正确地将查询格式化为".. like '%yourValue%'"

你看到了区别吗?

SELECT prod_name,description,price,in_stock,plat_name,genre_name FROM product WHERE prod_name LIKE '%'some text'%' -- (Wrong)

SELECT prod_name,description,price,in_stock,plat_name,genre_name FROM product WHERE prod_name LIKE '%some text%' -- (Correct!)