public static function getNewsList()
{
$db = DB::getConnection();
$newList = array();
$sql = $db->query('SELECT id, title, date, short_content '
. 'FROM news '
. 'ORDER BY date DESC '
. 'LIMIT 10 ');
if (!$sql) {
echo "\nPDO::errorInfo():\n";
print_r($db->errorInfo());
}
$result = $db->prepare($sql);
$result->setFetchMode(PDO::FETCH_ASSOC);
$result->execute();
var_dump($result);
$i = 0;
while ($row = $result->fetch()) {
$newList[$i]['id'] = $row['id'];
$newList[$i]['title'] = $row['title'];
$newList[$i]['data'] = $row['data'];
$newList[$i]['short_content'] = $row['short_content'];
$i++;
}
return $newList;
}
var_dump($result); возвращает object(PDOStatement)#4 (1) { ["queryString"]=> string(0) "" }
А PDO::errorInfo() - PDO::errorInfo(): Array ( [0] => 3D000 [1] => 1046 [2] => No database selected )
Привет, первым делом воспользовался поиском, но ответа не нашел. Выдает ошибку:
Fatal error: Call to a member function fetch() on a non-object in E:\OSPanel\domains\mysite.local\models\News.php on line 38
Я так понимаю это связано с тем, что var_dump($result)
выводит bool(false)
. Я не пойму как найти ошибку. Помогите пожалуйста.
Код БД class Db
{
public static function getConnection()
{
$paramsPath = ROOT .'../config/db_params.php';
$params = include($paramsPath);
$dsn = "mysql: host = {$params['host']}; dbname = {$params['dbname']}";
$db = new PDO($dsn, $params['user'], $params['password']);
$db->exec("set names utf8");
return $db;
}
}
и db_params
<?php
return [
'host' => 'localhost',
'dbname' => 'mvc_site',
'user' => 'root',
'password' => ''
];
Ты забыл выполнить запрос. Делается это с помощью execute();
.
public static function getNewsList() {
$db = DB::getConnection();
$newList = array();
$result = $db->query('SELECT id, title, date, short_content '
. 'FROM news '
. 'ORDER BY date DESC '
. 'LIMIT 10 ');
$result->execute();
$i = 0;
while ($row = $result->fetch()) {
$newList[$i]['id'] = $row['id'];
$newList[$i]['title'] = $row['title'];
$newList[$i]['data'] = $row['data'];
$newList[$i]['short_content'] = $row['short_content'];
$i++;
}
return $newList;
}
Всем большое спасибо! 1. в соединении с БД нужно было убрать пробелы в строке с $dsn
public static function getConnection()
{
$paramsPath = ROOT .'../config/db_params.php';
$params = include($paramsPath);
$dsn = "mysql:host={$params['host']};dbname={$params['dbname']}";
$db = new PDO($dsn, $params['user'], $params['password']);
$db->exec("set names utf8");
return $db;
}
2. В изначальном коде нужно было добавить $result->execute(); после выборки из БД
public static function getNewsList()
{
$db = DB::getConnection();
$newList = array();
$result = $db->query('SELECT id, title, date, short_content '
. 'FROM news '
. 'ORDER BY date DESC '
. 'LIMIT 10 ');
$result->execute();
$i = 0;
while ($row = $result->fetch()) {
$newList[$i]['id'] = $row['id'];
$newList[$i]['title'] = $row['title'];
$newList[$i]['date'] = $row['date'];
$newList[$i]['short_content'] = $row['short_content'];
$i++;
}
return $newList;
}
Причина:
$result->execute();
Попробуйте так:
public static function getNewsList() {
$db = DB::getConnection();
$sql = ('SELECT id, title, date, short_content '
. 'FROM news '
. 'ORDER BY date DESC '
. 'LIMIT 10 ');
$result = $db->prepare($sql);
$result->setFetchMode(PDO::FETCH_ASSOC);
$result->execute();
$i = 0;
$newList= array();
while ($row = $result->fetch()) {
$newList[$i]['id'] = $row['id'];
$newList[$i]['title'] = $row['title'];
$newList[$i]['data'] = $row['data'];
$newList[$i]['short_content'] = $row['short_content'];
$i++;
}
return $newList;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть скрипт регистрации и авторизации, как же сделать еще и подтверждение по мылу после реги вот архив со всеми причиндалами https://yadisk/d/Ves1fc4F3PwGCX
Я только только начинаю разбираться в phpВот задание: