Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
_Vladimir_
46 / 46 / 7
Регистрация: 27.07.2010
Сообщений: 242
#1

Объект PDO

05.02.2016, 17:20. Просмотров 805. Ответов 14
Метки нет (Все метки)

Здравствуйте, разбираюсь с PDO, хочу достать из таблицы данные, код ниже:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
class DBExample
{
    public function myQuery()
    {
        $dbh = new PDO('mysql: dbname=test; host=192.168.0.150', 'root', '');
        $sth =  $dbh->prepare('SELECT * FROM news');
        $sth->execute();
 
        return $sth->fetchAll(PDO::FETCH_OBJ);
    }
}
Но в итоге запрос ничего не возвращает (записи в таблице есть). Вот 'var_dump()' результата: 'array(0) { }'
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2016, 17:20
Ответы с готовыми решениями:

PDO
Я уже довольно долгое время использую это расширение в своих проектах и...

BETWEEN в PDO
Начал буквально час назад работать с опцией BETWEEN, чтобы сделать вывод...

PDO
Всем привет, нашёл готовый PDO класс но вот не могу разобраться как сделать...

PDO и IN
Как в PDO реализовать такой запрос? SELECT name FROM products WHERE id IN...

PDO
Есть код: $Plan_ID = 1; $stmt = $pdo-&gt;prepare('SELECT * FROM Plans WHERE ID...

14
Jodah
Эксперт PHP
2706 / 2378 / 1013
Регистрация: 01.08.2012
Сообщений: 8,405
05.02.2016, 17:42 #2
А в таблице news точно есть записи?

А как запускаете функцию?
0
_Vladimir_
46 / 46 / 7
Регистрация: 27.07.2010
Сообщений: 242
05.02.2016, 18:10  [ТС] #3
Да, в таблице есть одна запись. Запускаю так:
PHP
1
2
$test = new DBExample();
var_dump($test->myQuery());
0
grisha2217
18 / 18 / 10
Регистрация: 13.08.2013
Сообщений: 295
06.02.2016, 20:44 #4
Рабочий код:
PHP
1
2
3
4
5
$query = "SELECT field1 FROM news";
$res = $dbh>query($query);
while($rows = $res->fetch(PDO::FETCH_ASSOC)) {
    echo "{$rows['0']}";
}
ИЛИ

PHP
1
2
3
4
$query = "SELECT field1 FROM news";
$res = $dbh->query($query);
$rows = $res->fetch(PDO::FETCH_ASSOC);
print_r($rows);
0
_Vladimir_
46 / 46 / 7
Регистрация: 27.07.2010
Сообщений: 242
06.02.2016, 21:10  [ТС] #5
Всё-равно не работает, но хотя-бы выдает ошибку, вот она:
PHP
1
Fatal error: Call to a member function fetch() on a non-object in D:\OpenServer\domains\lessons\classes\DBExample.php on line 15
Добавлено через 11 минут
Вот весь код, который находится в функции:
PHP
1
2
3
4
5
6
$dbh = new PDO('mysql: dbname=test; host=192.168.0.150', 'root', '');
$query = "SELECT * FROM news";
$res = $dbh->query($query);
while($rows = $res->fetch(PDO::FETCH_ASSOC)) {
    echo "{$rows['0']}";
}
0
grisha2217
18 / 18 / 10
Регистрация: 13.08.2013
Сообщений: 295
06.02.2016, 21:36 #6
Цитата Сообщение от _Vladimir_ Посмотреть сообщение
Всё-равно не работает, но хотя-бы выдает ошибку, вот она:
Я дал рабочий код из своего проекта, ищите ошибку в другом месте.
Попробуйте коннект заменить на это:
PHP
1
2
3
try {
$dbh = new PDO('mysql: dbname=test; host=192.168.0.150', 'root', '');
}
Добавлено через 1 минуту
Уберите функцию, разработайте простой код без сложностей, потом постепенно добавляйте функционал
0
_Vladimir_
46 / 46 / 7
Регистрация: 27.07.2010
Сообщений: 242
07.02.2016, 00:46  [ТС] #7
Работаю под Windows 10 x64:
1. Переустановил OpenServer;
2. В настройках установил следующие версии: Apache-2.4, PHP-5.5, MySQL-5.5;
3. Отключил антивирус.
4. Создал новый проект и в index.php записал:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
try {
    $dbh = new PDO('mysql: dbname=test; host=localhost', 'root', '');
} catch (PDOException $e) {
    echo $e->getMessage();
}
 
$query = "SELECT * FROM news";
$res = $dbh->query($query);
while($rows = $res->fetch(PDO::FETCH_ASSOC)) {
    echo "{$rows['0']}";
}
В результате ничего не изменилось, по-прежнему не работает и выдает ту же ошибку, причем даже с заведомо неверными данными подключения к БД.
0
Lazy_Den
2931 / 2610 / 1317
Регистрация: 15.01.2014
Сообщений: 5,733
07.02.2016, 01:21 #8
_Vladimir_, включите режим сообщений об ошибках ERRMODE_EXCEPTION и на всякий пожарный, добавьте порт:
PHP
1
2
3
4
5
6
7
<?php
try {
    $dbh = new \PDO('mysql:dbname=test;host=localhost;port=3306', 'root', '');
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch (\PDOException $e) {
    echo $e->getMessage();
}
Может теперь ошибка проявится. А вообще, уже года 3-4 с OpenServer работаю и такого плана проблем не возникало.
0
_Vladimir_
46 / 46 / 7
Регистрация: 27.07.2010
Сообщений: 242
07.02.2016, 11:24  [ТС] #9
Добавление параметров в перехватчик исключений в итоге ничего не добавил в текст ошибки.

Вот что пишет XDebug
0
Миниатюры
Объект PDO  
_Vladimir_
46 / 46 / 7
Регистрация: 27.07.2010
Сообщений: 242
07.02.2016, 11:51  [ТС] #10
А "var_dump($res);" выводит "boolean false".
0
Lazy_Den
2931 / 2610 / 1317
Регистрация: 15.01.2014
Сообщений: 5,733
07.02.2016, 13:50 #11
_Vladimir_, вы явно что-то упустили, какую-то мелочь, в сторону которой даже мысля не поворачивается. Мы же не знаем ваш уровень, поэтому предположения могут быть самыми бредовыми, вплоть до того, что и таблицы news не существует. Перепроверьте имя базы и таблицы. Может какая-то буква была случайно написана в другой раскладке.

Добавлено через 8 минут
Если хотите, давайте сделаем простой эксперимент. Я вам скину стопроцентно рабочий пример с дампом БД, а вы протестируете его у себя.
0
_Vladimir_
46 / 46 / 7
Регистрация: 27.07.2010
Сообщений: 242
07.02.2016, 14:04  [ТС] #12
Да, скиньте пожалуйста сюда или на hvvmail@mail.ru , если и так не получится, буду пробовать на чистой системе под виртуалкой.
0
Lazy_Den
2931 / 2610 / 1317
Регистрация: 15.01.2014
Сообщений: 5,733
07.02.2016, 14:31 #13
_Vladimir_, для чистоты эксперимента, делаете по инструкции:
1. Идем в папку "domains" OpenServer-а и распаковываем в неё архив. У вас появится папка с именем "testdb.loc", а в ней четыре файла: index.php, db.class.php, .htaccess и test_db.sql
2. Перезапускаем OpenServer
3. В phpMyAdmin переходим на закладку "Импорт" и загружаем дамп (файл "test_db.sql"). Будет создана база "test_db" и таблица "news" с крутыми новостями.
4. В браузере набираем адрес: "http://testdb.loc".
1
Вложения
Тип файла: rar testdb.loc.rar (1.9 Кб, 4 просмотров)
Lazy_Den
2931 / 2610 / 1317
Регистрация: 15.01.2014
Сообщений: 5,733
07.02.2016, 14:32 #14
Лучший ответ Сообщение было отмечено _Vladimir_ как решение

Решение

P.S. Всё забываю спросить - версия OpenServer какая у вас?
1
_Vladimir_
46 / 46 / 7
Регистрация: 27.07.2010
Сообщений: 242
07.02.2016, 22:30  [ТС] #15
Спасибо, ваш пример сразу заработал!
После внимательного сравнения наконец-то нашел свою ошибку, оказывается при создании объекта PDO, в его параметрах, недопускаются пробелы, у меня было: "mysql: dbname=test;", а следовало писать "mysql:dbname=test;".
0
07.02.2016, 22:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2016, 22:30

addslashes в PDO
Привет, мир! Как правильно добавить функцию addslashes() в PDO? Есть простой...

Экранирование и PDO
Всем привет! Работаю с ПДО, пытаюсь вносить в базу какие-то данные от...

Select in PDO
Здравствуйте - кто нибудь скажет как запрос выбора делать на PDO ?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru