0

私はこのクエリを持っています:

$conditions = array(
            'editore LIKE' => "%$e%",
            'titolo LIKE' => "%$t%"
        );
        if (isset($autore_diviso))
            $conditions[] = array('autori LIKE ? AND ?' => array("%$autore1%","%$autore2%"));                   
        else
            $conditions[]=array('autori LIKE' => "%$a%");
        if (!$anno&&!$anno2) // I HAVE TO CHANGE THIS - if the user does not insert any year
            $conditions=$conditions;
        else {
        if (!$anno)
            $conditions[] = array('anno <=' => "$anno2");          
        if (!$anno2)
            $conditions[] = array('anno >=' => "$anno");
        }
        if ($anno&&$anno2)
            $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2));

annoが年を意味する場合、editoreは発行者を意味し、titoloはタイトルを意味します。

正確に2人の著者の検索は機能していません。
$ conditionをデバッグする場合、たとえば次のようになります。

Array (
[editore LIKE] => %%
[titolo LIKE] => %%
[0] => Array
    (
        [autori LIKE ? AND ?] => Array
            (
                [0] => %massi%
                [1] => %palu%
            )

    ) )


しかし、結果は空です。

4

2 に答える 2

0

これは、PHPで配列に要素を追加する方法ではありません。また、明示的に使用する必要はありませんAND。これがデフォルトです。それ以外の場合は複数の同一の配列キーがある場合にのみ必要です。

$conditions = array(
    'autori LIKE ? AND ?' => array("%$autore1%","%$autore2%"), 'editore LIKE' => "%$e%",
    'titolo LIKE' => "%$t%"
);

if (!$anno)
    $conditions[] = array('anno <=' => "$anno2");          

if (!$anno2)
    $conditions[] = array('anno >=' => "$anno");

if ($anno&&$anno2)
    $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2));
于 2013-02-12T08:10:01.623 に答える
0

このコードで解決:

$conditions = array(
        'editore LIKE' => "%$e%",
        'titolo LIKE' => "%$t%"
    );
    if (isset($autore_diviso))
        $conditions[] = array('autori LIKE ? AND autori LIKE?' => array("%$autore1%","%$autore2%"));                    
    else
        $conditions[]=array('autori LIKE' => "%$a%");
    if (!$anno&&!$anno2)    // Da sistemare.
        $conditions=$conditions;
    else {
    if (!$anno)
        $conditions[] = array('anno <=' => "$anno2");          
    if (!$anno2)
        $conditions[] = array('anno >=' => "$anno");
    }
    if ($anno&&$anno2)
        $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2));
    debug($conditions);
于 2013-02-27T15:39:32.583 に答える