pdo在获取错误中获取

时间:2010-09-30 21:06:26

标签: php mysql pdo fetch

我正在尝试运行以下脚本(失败):

$variables = $db->query("SELECT * FROM table1 WHERE Session_ID = '$sess1'");

while($row = $variables->fetch()) {

//FETCH DATA
$id= $row["ID"];
$info = $db->query("SELECT * FROM table2 WHERE ID = $id");

while($row2 = $info->fetch()) { 
    $name = $row2["FNAME"]." ".$row2["LNAME"]; }
    $phone = $row2["PHONE"];
}

//SEND CUSTOMER EMAIL
require("../email/email.php");                      
}

这会返回错误:致命错误:在...中的非对象上调用成员函数fetch()

虽然我能够“解决”这个问题,但它很难看。基本上我必须在下面尝试的那个之前做几次调用(理论上应该工作)。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

试试这个

    //prepare the query
    $variables = $db->prepare("SELECT * FROM table1 WHERE Session_ID = :sess1");
    $info = $db->prepare("SELECT * FROM table2 WHERE ID = :ID");

    //bind the variable :sess1 to $sess1
    $variables->bindParam(':sess1', $sess1, PDO::PARAM_STR);

    //execute the query 
    $variables->execute;

    //fetch the result
    $result = $variables->fetch(PDO::FETCH_ASSOC);

    //set $result['ID'] to a variable and bind it to the variable :ID in our second query
    $id = $result['ID'];
    $info->bindParam(':ID', $id, PDO::PARAM_INT);

    while($row2 = $info->fetch()) { 
        $name = $row2["FNAME"]." ".$row2["LNAME"]; }
        $phone = $row2["PHONE"];
    }

    //SEND CUSTOMER EMAIL
    require("../email/email.php");                      
    }

答案 1 :(得分:0)

据我所知,您必须先从结果集中获取所有结果,然后才能发出新查询。如果你正在使用MySQL,你可以通过调用$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);来避开它,但我会反对它,因为它使你的代码不那么可移植,并且PDO的主要优点,数据库抽象,丢失了。