4

少し問題が発生しました。私は次のコードを持っています:

    $query = $db->prepare('(SELECT last_visit, last_ip FROM user_log WHERE user_id = :id) 
                            UNION
                           (SELECT time AS last_visit, packet_hex AS last_ip FROM crack_log WHERE target_id = :id)
                            ORDER BY last_visit DESC LIMIT 0,10;');
    $query->execute(array(':id'=> $_SESSION['id']));
    $log = $query->fetchAll(PDO::FETCH_ASSOC); //Last visit/IP

    var_dump($log);

どちらが返されますか:

array(0) { } 

phpmyadminでクエリを試しましたが、正常に機能しました。エラーを見つけるのを手伝ってくれませんか。

4

1 に答える 1

4

ドキュメントによると

準備済みステートメントで、同じ名前の名前付きパラメーター マーカーを 2 回使用することはできません。SQL ステートメントの IN() 節などで、複数の値を 1 つの名前付きパラメーターにバインドすることはできません。

あなたの場合、次のようなものを使用する必要があります

$query = $db->prepare('(SELECT last_visit, 
                               last_ip 
                        FROM user_log 
                        WHERE user_id = :id_1
                       ) 
                        UNION
                       (SELECT time AS last_visit,
                               packet_hex AS last_ip 
                        FROM crack_log 
                        WHERE target_id = :id_2
                       )
                       ORDER BY last_visit DESC LIMIT 0,10;'
                     );
    $query->execute(array(':id_1'=> $_SESSION['id'],
                          ':id_2'=> $_SESSION['id'] 
                         )
                   );  
于 2013-03-04T00:16:10.530 に答える