1

次の作業を行うことができません。以下の例でプリペアド ステートメントを使用したいのですが、エラーが発生します。関数は間違いなく正しい値を $array に渡します:

  private function getInfoFromSystem($array) {
        try {
            $sql = "
                SELECT     
                    PCO_AGENT.NAME, 
                    PCO_INBOUNDLOG.LOGIN AS LOGINID, 
                    PCO_INBOUNDLOG.PHONE AS CALLERID, 
                    PCO_INBOUNDLOG.STATION AS EXTEN, 
                    PCO_INBOUNDLOG.TALKTIME AS CALLLENGTH, 
                    PCO_INBOUNDLOG.CHANNELRECORDID AS RECORDINGID, 
                    PCO_SOFTPHONECALLLOG.RDATE, 
                    PCO_INBOUNDLOG.RDATE AS INBOUNDDATE
                FROM         
                    PCO_INBOUNDLOG 
                INNER JOIN
                      PCO_LOGINAGENT ON PCO_INBOUNDLOG.LOGIN = PCO_LOGINAGENT.LOGIN 
                INNER JOIN
                      PCO_SOFTPHONECALLLOG ON PCO_INBOUNDLOG.ID = PCO_SOFTPHONECALLLOG.CONTACTID 
                INNER JOIN
                      PCO_AGENT ON PCO_LOGINAGENT.AGENTID = PCO_AGENT.ID
                WHERE
                    LOGINID = :extension
            ";
            $arr = array(":extension" => $array['extension']);
            $query = $this->mssql->prepare($sql);
            $query->execute($arr);
           // $sql = "select * from sys.messages where message_id = 229";
            foreach($this->mssql->query($sql) as $row) {

                echo "<pre>";
                print_r($row);
                echo "</pre>";
            }

        }
        catch(PDOException $e) {
            echo $e->getMessage();
        }
}
4

1 に答える 1

1

query()の後に電話するべきではありませんexecute()。代わりにあなたはあなたの行に必要ですfetch()

$query = $this->mssql->prepare($sql);
$query->execute($arr);

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  echo "<pre>";
  print_r($row);
  echo "</pre>";
}

// OR rather than the fetch loop above, use fetchAll()
$rowset = $query->fetchAll(PDO::FETCH_ASSOC);
print_r($rowset);

execute()PDO + MSSQLの私の経験では、行を返すステートメントを呼び出した直後に通常のクエリを呼び出そうとすると、$query->closeCursor()最初に呼び出さない限り失敗します。ただし、この場合は、query()まったく電話をかけないでください。バインドされたパラメータを使用してステートメントをすでに実行しており、そこから行をフェッチする必要があります。

于 2012-06-07T12:27:49.880 に答える