0

这是我从 db 中选择的代码:

$q = $this->db->like('Autor1' or 'Autor2' or 'Autor3' or 'Autor4', $vyraz)
    ->where('stav', 1)
    ->order_by('id', 'desc')
    ->limit($limit)
    ->offset($offset)
    ->get('knihy');
                    
    return $q->result();

在哪里$vyraz = "Zuzana Šidlíková";

错误是:

Nastala chyba 数据库

错误号:1054

'where 子句'中的未知列'1'

SELECT * FROM (\knihy`) WHERE `stav` = 1 AND `1` LIKE '%Zuzana Ĺ idlĂková%' ORDER BY `id` desc LIMIT 9

文件名:C:\wamp\www\artbooks\system\database\DB_driver.php

行号:330

你能帮我解决这个问题吗?

4

1 回答 1

1

您的语法对于您要执行的操作是错误的,但在技术上仍然有效,因为:

'Autor1' or 'Autor2' or 'Autor3' or 'Autor4'

...实际上是一个有效的 PHP 表达式,其计算结果为TRUE(因为所有非空字符串都是“真实的”),当转换为字符串或echoed 时输出为1,因此 DB 类正在寻找一个名为“ 1"。

例子:

function like($arg1, $arg2)
{
    return "WHERE $arg1 LIKE '%$arg2%'";
}

$vyraz = 'Zuzana Šidlíková';
echo like('Autor1' or 'Autor2' or 'Autor3' or 'Autor4', $vyraz);

// Output: WHERE 1 LIKE '%Zuzana Šidlíková%'

无论如何,这就是你需要的:

$q = $this->db
    ->like('Autor1', $vyraz)
    ->or_like('Autor2', $vyraz)
    ->or_like('Autor3', $vyraz)
    ->or_like('Autor4', $vyraz)
    ->where('stav', 1)
    ->order_by('id', 'desc')
    ->limit($limit)
    ->offset($offset)
    ->get('knihy');
于 2012-08-29T18:18:41.607 回答