2016-11-11 16 views
2

我有这样的脚本:添加%通配符来我的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); 

而且它给我这个错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%'some text'%'

我知道,那些百分号都是问题。如果我删除它们的代码工作得很好,但我怎么得到这些迹象?我需要它们是因为我想选择包含给定字符串的所有记录。

回答

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!) 
+0

我认为准备不正确的查询实际上是...... LIKE%'一些文本'%'。 '%'中的外部引号是'%'的一些文本是错误信息的一部分。 –

+1

非常棒,你展示了正确与错误的最终SQL。在解决这种性质的问题时,重要的是要展示它试图执行的SQL所解决的问题,然后错误几乎总是显而易见的。 – HLGEM