Php 服务器版本存在问题,无法在第1行的“m.nazivModela asc”附近使用“%zoom%”语法

Php 服务器版本存在问题,无法在第1行的“m.nazivModela asc”附近使用“%zoom%”语法,php,sql,Php,Sql,我对php非常陌生,所以这部分代码有问题 $result = $db->query('select * from kupovina k join model m on k.modelID=m.modelID join boja b on k.bojaID=b.bojaID where m.nazivModela LIKE "%'.$search.'%" order by m.nazivModela asc'); 我在phpmyadmin数据库中检查了sql查询,它工作正常,但是当我尝试在

我对php非常陌生,所以这部分代码有问题

$result = $db->query('select * from kupovina k join model m on k.modelID=m.modelID join boja b on k.bojaID=b.bojaID where m.nazivModela LIKE "%'.$search.'%" order by m.nazivModela asc');
我在phpmyadmin数据库中检查了sql查询,它工作正常,但是当我尝试在我的网站表单上测试它时,我出现了这个语法错误,所以请帮助我找出需要更改的内容

编辑:我尝试使用双引号来声明语句,在LIKE子句中使用单引号,但仍然是相同的错误
如果在LIKE子句中使用双引号,则最好使用单引号,具体取决于所使用的RDBMS,这可能会导致语法错误。为了解决这个问题,您可以更改PHP语法:使用双引号声明语句,在LIKE子句中使用单引号

此外,使用GROUP BY。。。asc没有意义,你是指订单吗

所以,也许:

$result = $db->query("select * from kupovina k join model m on k.modelID=m.modelID join boja b on k.bojaID=b.bojaID where m.nazivModela LIKE '%".$search."%' order by by m.nazivModela asc");
总之,最好使用一个准备好的语句和绑定参数——这也可以防止任何类型的sql注入

my $sth =  $db->prepare("select * from kupovina k join model m on k.modelID=m.modelID join boja b on k.bojaID=b.bojaID where m.nazivModela LIKE ? order by by m.nazivModela asc");
$db->execute($sth, '%'.$search.'%');
my $result = $sth->fetchAll();

似乎您试图对结果进行排序,而不是分组。试试这个:

$result = $db->query('select * from kupovina k join model m on k.modelID=m.modelID join boja b on k.bojaID=b.bojaID where m.nazivModela LIKE "%'.$search.'%" ORDER by m.nazivModela asc');

我相信您不需要在您的案例中使用GROUP BY,因为您确实需要“选择*FROM”,请添加文字错误消息,即复制和粘贴。另外,请仔细检查您是否使用了标准的双引号,您在标题中的信息对我很有吸引力。对不起,组错了,我是指顺序。我添加了问题的屏幕截图,试图更改语句,但仍然没有更改什么说明不能使用双引号?你有链接吗?@JonStirling,至少对Oracle来说是这样,因为OP没有指定他正在使用的RDBMS……是的,这肯定是问题所在,或者至少是问题的一部分。你最好使用事先准备好的语句。那么引用就不重要了。@JayBlanchard:是的-我在最初的回答中已经提到了这一点,我只是添加了一个例子