Когда я начал изучать PHP, я никогда не касался MySQL_, потому что все сказали мне начать с PDO.
Я знаю, что PDO извлечения, выполнения и т. Д. Но я не могу понять, как преобразовать это в PDO:
Это система разбиения на страницы, и немного ее.
// counting the offset $sql = ("SELECT * FROM comments LIMIT $offset, $rowsPerPage"); $res = mysql_query($sql) or die(mysql_error()); // how many rows we have in database $sql2 = "SELECT COUNT(comment_id) AS numrows FROM comments"; $res2 = mysql_query($sql2) or die(mysql_error()); $row2 = mysql_fetch_array($res2); $numrows = $row2['numrows']; // print the random numbers while($row = mysql_fetch_array($res)) { //Echo out your table contents here. echo $row[1].'<BR>'; echo $row[2].'<BR>'; echo '<BR>'; }
Я понятия не имею, что такое mysql_fetch_array, но похоже, что он похож на PDO :: FETCH, но я не могу его получить.
Может ли кто-нибудь дать мне несколько советов о том, как преобразовать этот MySQL_ в PDO?
Благодарю.
Это полный код:
http://pastebin.com/hg1Cd246
Моя попытка конвертировать:
// counting the offset $sql = $pdo->prepare("SELECT * FROM comments LIMIT $offset, $rowsPerPage"); $res = $sql->execute(); // how many rows we have in database $sql2 = $pdo->prepare("SELECT COUNT(comment_id) AS numrows FROM comments"); $res2 = $sql2->execute(); $row2 = $res2->fetchAll(); $numrows = $row2['numrows']; // print the random numbers while($row = $res2->fetchAll()) { //Echo out your table contents here. echo $row[1].'<BR>'; echo $row[2].'<BR>'; echo '<BR>'; }
но получение этой ошибки:
Неустранимая ошибка: вызов функции-члена fetchAll () для не-объекта
эта строка: $ row2 = $ res2-> fetchAll ();
что я сделал не так?
Я понятия не имею, что такое mysql_fetch_array, ну, похоже, он похож на PDO :: FETCH
Ну, mysql_fetch_array
– это функция, которая будет извлекать результат (исходящий из mysql_query
) в массив. PDO::FETCH_*
вместо этого является семейством констант .
Может ли кто-нибудь дать мне несколько советов о том, как преобразовать этот MySQL_ в PDO?
Я не хочу казаться грубым, но вы должны обязательно RTM: вы можете легко найти правильную документацию и примеры .
Выполняет ли fetchAll () ту же работу, что и mysql_fetch_array?
Вы можете посмотреть как документацию для mysql_fetch_array
и PDOStatament::fetchAll
чтобы ответить на это самостоятельно. Просто чтобы вы заметили: на странице связанной документации для mysql_fetch_array
он явно говорит:
Альтернативы этой функции включают: […] PDOStatement :: fetch ()
Я получаю эту ошибку: Неустранимая ошибка: вызов функции-члена fetchAll () для объекта без объекта
Эта:
$res2 = $sql2->execute(); $row2 = $res2->fetchAll();
Вызывает эту ошибку, потому что execute()
возвращает логическое значение. Чтобы получить результаты через fetchAll()
вы должны называть его PDOStatament
(в вашем случае $sql2
). Это правильный код:
$sql2->execute(); $row2 = $sql2->fetchAll();
Согласно вашему коду, вы используете mysql_fetch_array
и заполняете его именем столбца в своей базе данных:
**$row2** = mysql_fetch_array($res2); $numrows = **$row2['numrows']**;
Вы можете использовать PDO::FETCH_ASSOC
чтобы продолжить использование имен столбца и в дополнение к этому вы можете использовать числовое значение столбцов (1-й столбец – номер 0, 2-й столбец 1 и т. Д.).
Я не очень часто встречаюсь с PDO, поэтому, пожалуйста, посмотрите на ответы других людей. Кроме того, я также настоятельно рекомендую вам взглянуть на то, какие способы вы можете использовать для извлечения данных из вашей базы данных (_rows, _assoc, _array и т. Д.). Там есть чему поучиться 🙂