2013-03-04 87 views
4

我遇到了一个小问题。 我有以下代码:PDO提取不会返回

$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); 

将返回:

​​

我试图在phpMyAdmin查询和它工作得很好。你能帮我找到错误吗?

+1

? – Martin 2013-03-04 00:09:54

+0

有什么错误?你是否session_start(); ? – 2013-03-04 00:10:23

+0

你有try-catch检查查询和PDOException吗? – Sam 2013-03-04 00:11:01

回答

3

Accorrding to the documentation

在 准备好的语句不能使用相同的名称的命名参数标记的两倍。 对于 示例,SQL语句的IN()子句,不能将多个值绑定到单个命名参数中。

在你的情况下,你应该用你是否检查`$ DB-> errorInfo中()`像

$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'] 
         ) 
        );