php - 将 mysql 代码转换为 PDO 没有输出

标签 php mysql pdo

我正在尝试转换给定的代码 here使用 OOP 方法到 PDO。这是我到目前为止所得到的:

评论.PHP:

public function loadComments() {
              $sql = "SELECT * FROM `comments`
                      WHERE
                      `comments`.`ImageID`  = :imageid ;";

            try
            {
                $imageid = $_REQUEST['imageid'];



                $query = $this->_db->prepare($sql);
                $params = array(':imageid' => $imageid);
                $query->execute($params); 

                for ($x = 0, $row = $query->fetch(PDO::FETCH_ASSOC); $x < $row; $x++) {
                 $comments[$x] = array("name" => $row["name"], "comment" => $row["comment"], "date" => $row["date"]);       
                    }

                $response = $_GET["jsoncallback"] . "(" . json_encode($comments) . ")";
                echo $response;
                return TRUE;

            }
            catch(Exception $ex)
            {
                return FALSE;
            }
    }

Firebug 抛出 undefined variable: comments 错误。

这是原始代码:

  $query = mysql_query("SELECT
                          * FROM `comments`
                          WHERE
                          `comments`.`ImageID`  = '$imageid' ;");

        //loop through and return results
      for ($x = 0, $numrows = mysql_num_rows($query); $x < $numrows; $x++) {
            $row = mysql_fetch_assoc($query);

            $comments[$x] = array("name" => $row["name"], "comment" => $row["comment"], "date" => $row["date"]);            
        }

        //echo JSON to page
        $response = $_GET["jsoncallback"] . "(" . json_encode($comments) . ")";
        echo $response;

我哪里做错了?

最佳答案

您正在使用 $x < $row当我认为你打算使用 $x < $numrows

for ($x = 0, $row = $query->fetch(PDO::FETCH_ASSOC); $x < $row; $x++)
                                                          ^^^^^
$numrows = $query->rowCount();
for ($x = 0, $row = $query->fetch(PDO::FETCH_ASSOC); $x < $numrows; $x++)

整个循环可以这样写更好:

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  $comments[] = array("name" => $row["name"], "comment" => $row["comment"], "date" => $row["date"]);       
}

不需要 $x如果你使用 $comments[] 计数器语法,因为这会将带有数字键的每个新行附加到数组中。

关于php - 将 mysql 代码转换为 PDO 没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6076952/

相关文章:

php - 误解 array_udiff 的行为

php - "Add to favorites"使用 mysqli_fetch_assoc 数据库表检索项目的功能

mysql - 从两列mysql的范围中选择数据

php - 检查行是否存在,最有效的方法?

php - MYSQL 结果没有正确返回

PHP 创建 Excel 电子表格,然后将其作为附件通过电子邮件发送

php - 遇到撇号时工具提示会损坏

MYSQL UDF 函数返回 XML

mysql - 重复行更改某些列?

php - PDO errorinfo 不返回信息