在模型查询中 -
public function get_articles_from_query($squery){
$query = DB::query(Database::SELECT, 'SELECT * FROM ieraksti WHERE virsraksts = "%:squery%" AND slug = "%:squery%" AND saturs = "%:squery%"')
->parameters(array(":squery" => $squery))->execute();
return $query;
}
为什么这个脚本不起作用?我没有任何错误,但找不到博客文章。
答案 0 :(得分:1)
好吧,我的第一个问题是:
在标题,内容和所有三个中,您是否有任何包含
%
个字符的且没有其他的行slu (a)?这似乎不太可能。
如果没有,查询将不返回任何行。
%
通配符的使用适用于like
,而不适用于=
。例如,如果您的squery
字词为banāns
,则您的查询只会匹配所有三列完全 %banāns%
的行值,不在其中某处包含banāns
的值。
我想你想要:
SELECT * FROM ieraksti
WHERE virsraksts like "%:squery%"
AND slug like "%:squery%"
AND saturs like "%:squery%"
对于您后续的问题:
我理解这个问题。我输入了模型var_dump($ query);它显示查询 -
SELECT * FROM ieraksti WHERE virsraksts like "%'ar'%" OR slug like "%'ar'%" OR saturs like "%'ar'%
。这不是'ar'这个词,而是ar。如何从查询中删除?
如果是这种情况,您必须将查询更改为:
$query = DB::query(Database::SELECT,
'SELECT * FROM ieraksti WHERE virsraksts like :squery AND slug ...')
->parameters(array(":squery" => "%$squery%"))->execute();
换句话说,将%
字符的附件移动到参数规范,而不是查询本身。在您的调试中,参数会自动包含单引号,因此,如果您想在 inside 那些引号内执行任何操作,则必须在包装之前执行此操作。
在这种情况下你显然不需要双引号,因为正在进行包装。
并检查其中包含"%$squery%"
的行,我不确定它是否是正确的语法。我说我的PHP有点生疏,但说实话,我一生只用了大约七分钟: - )
您的目标是由%
组成的字符串,$squery
的值和另一个%
。
(a)Mantiešāmpatīk,kāGoogle翻译padaramaniizzatāssyzinudesmitiemdažādāsvalodās: - )