为什么查询不起作用?

时间:2011-10-25 08:13:16

标签: php oop kohana

在模型查询中 -

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;
} 

为什么这个脚本不起作用?我没有任何错误,但找不到博客文章。

1 个答案:

答案 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šāmpa​​tīk,kāGoogle翻译padaramaniizzatāssyzinudesmitiemdažādāsvalodās: - )