Преобразование кода MySQL в PDO не дает вывода - PullRequest
2 голосов
/ 20 мая 2011

Я пытаюсь преобразовать код здесь в PDO, используя подход ООП. Это то, что у меня так далеко:

comments.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;

Где я ошибся?

Ответы [ 3 ]

2 голосов
/ 20 мая 2011

Вы используете $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[], так как он добавит каждую новую строку с числовым ключом к массиву.

0 голосов
/ 21 мая 2011

В следующей строке есть синтаксическая ошибка (запятая вместо точки с запятой):

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

Должно быть:

for ($x = 0; $row = $query->fetch(PDO::FETCH_ASSOC); $x < $row; $x++) {
0 голосов
/ 20 мая 2011

Ваш цикл for неправильный.Вам нужно получить количество строк, затем вызывать $query->fetch() на каждой итерации цикла:

$numrows = //...
for ($x = 0; $x < $numrows; $x++) {
  $row = $query->fetch(PDO::FETCH_ASSOC);
  $comments[$x] = array("name" => $row["name"], "comment" => $row["comment"], "date" => $row["date"]);       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...