0

次のスクリプトを実行しようとしています(失敗しました)。

$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()を呼び出します...

私は問題を「解決」することができますが、それは醜いです。基本的に、以下で試しているものよりも前にいくつかの呼び出しを行う必要があります(理論的には機能するはずです)。

何か案は?

4

2 に答える 2

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");                      
    }
于 2010-09-30T21:14:13.837 に答える
0

私の知る限り、新しいクエリを発行する前に、結果セットからすべての結果をフェッチする必要があります。MySQLを使用している場合は、を呼び出すことでそれを回避できますが$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);、コードの移植性が低下し、PDOの主要な利点であるデータベースの抽象化が失われるため、これに反対することをお勧めします。

于 2010-09-30T21:31:55.777 に答える