Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66

Не выполняется подготовленный запрос (PHP PDO ODBC + MS Access)

25.09.2013, 22:29. Показов 4462. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

Если пишу (глупо, конечно, получается, но всё же. так я проверял работает запрос вообще или нет)
PHP
1
2
$pr = $db->prepare("SELECT * FROM пользователи");
$pr->execute();
то fetchAll возвращает мне мои данные
А если пишу
PHP
1
2
3
$pr = $db->prepare("SELECT * FROM :tbl");
$pr->bindValue(':tbl', 'пользователи')
$pr->execute();
fetchAll возвращает мне пустой массив, ошибок не возникает...
прошу подсказать куда копать

Добавлено через 23 часа 15 минут
от bindParam такой-же эффект
вывел на экран $pr после bindValue, он мне пишет запрос "SELECT * FROM :tbl", то есть не измененным. После бинда название таблицы должно было подставиться, правильно я понимаю?
Есть знатоки PDO? или те, кто сталкивался с такой проблемой?

Добавлено через 2 часа 42 минуты
задал вывод ошибок PDO, жаль, что не сделал этого раньше, не убил бы сутки просто так
так вот, одбц мне сказал, что вместо имени таблицы задан параметр.
плохо, что так делать нельзя и странно, что пхп эту ошибку мне не выдал (включен вывод всех ошибок)
всем спасибо за предоставленную возможность ведения такого прекрасного монолога
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.09.2013, 22:29
Ответы с готовыми решениями:

Не выполняется SQL-запрос, PHP PDO
Не получается выполнить SQL-запрос. Данные из формы подгружаются, соединение с БД устанавливается, а execute() выполнить не получается....

Не срабатывает подготовленный запрос PHP 7
Начал теребить старый сайт, который был написан когда стоял php 5.6. Но с 7 версией возникли проблемы. Есть страница загрузки...

Php + access кодировка (PDO)
Привет, как правильно кодировку указывать ? В интернетах ничего внятного найти не могу. Такой вариант не работает, на выходе 1 -...

22
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
28.09.2013, 01:13
Поздно увидел Вашу тему, в своё время столкнулся с тем же:)
1
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66
28.09.2013, 03:59  [ТС]
хм, а что может означать такой результат errorInfo
Array
(
[0] => 00000
[1] => 0
[2] => ((null)[0] at (null):0)
[3] =>
)
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
28.09.2013, 05:12
[0] => 00000
это код ошибки SQLSTATE, говорящий о том, что ошибок нет
странно, конечно, что он в Вашем случае не ругается на Incorrect table name
0
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66
28.09.2013, 05:22  [ТС]
а, ну да...
не ругается потому что я уже исправил ошибку
PHP
1
2
3
4
$sql = "SELECT Имя FROM пользователи WHERE Учится = :where ORDER BY Фамилия";
$pre = $con->prepare($sql);
$val = true;
$pre->bindParam(":where", $val, PDO::PARAM_BOOL);
execute всё проглатывает, но возвращает пустой результат
при этом если написать true вместо :where, то получаю нормальный результат
вот такая штука...
1
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
28.09.2013, 05:49
поэкспериментировал с подобным примером, у меня выдал другой errorInfo:
array (size=3)
0 => string '00000' (length=5)
1 => int 1064
2 => string 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''user'' at line 1' (length=152)

user - это название таблицы.


PHP
1
2
3
4
5
$sql = "SELECT Имя FROM пользователи WHERE Учится = :where ORDER BY Фамилия";
$pre = $con->prepare($sql);
$val = true;
$pre->bindParam(":where", $val, PDO::PARAM_BOOL);
$true_or_false=$pre->execute();
просто надо проверять результат execute, там будет false
0
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66
28.09.2013, 07:37  [ТС]
true говорит
а массив пустой
закрадывается мысль - pdo_odbc без глюков вообще написан?
ато понятное дело ошибка при выполнении из-за моей ошибки, но когда уже сама система говорит что всё без ошибок и возвращает пустой результат...
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
28.09.2013, 08:10
true говорит
а массив пустой
ну, в этом конкретном запросе я бы еще посмотрел в каком виде в столбе "Учится" данные в БД
0
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66
28.09.2013, 08:20  [ТС]
хороший совет
но он bool
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
28.09.2013, 08:27
если столбец "Учится" обычный varchar или text и там записи true или false, тогда запрос
PHP
1
2
3
4
$sql = "SELECT Имя FROM пользователи WHERE Учится = :where ORDER BY Фамилия";
$pre = $con->prepare($sql);
$val = true;
$pre->bindParam(":where", $val, PDO::PARAM_BOOL);
будет правильным, но под условия ничего попадать не будет, и возвращаться будет пустой массив.
Чтобы такой запрос работал корректно, надо чтобы в столбце "Учится" данные были типа BOOLEAN (TINYINT(1))
хороший совет
но он bool
тогда странно, потому что у меня работает корректно
0
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66
28.09.2013, 08:31  [ТС]
в итоге делается вывод "потому что майкрософт"?
или всё таки я еще что-то не правильно делаю, что всё таки более вероятно... наверное...
Кстати, в следующем запросе тоже неработает, там уже string
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
28.09.2013, 08:37
А как выглядят сами данные в каком-нибудь sql- менеджере (ну или что там есть штатного у Access? - просто никогда с ним дело не имел) запроса "SELECT * FROM пользователи"
в столбце "Учится" - цифры?

Кстати, в следующем запросе тоже не работает, там уже string
string работать не должно из
PHP
1
2
$val = true;
$pre->bindParam(":where", $val, PDO::PARAM_BOOL);
приходит что-то типа заэкранированной единицы
0
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66
28.09.2013, 08:55  [ТС]
там где строка я шлю PDO::PARAM_STR
а у столбца "учится" тип данных "Логический"
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
28.09.2013, 09:02
Чего-то я совсем запутался под утро
там где строка я шлю PDO::PARAM_STR
я правильно понял, что к той же таблице с теми же типами данных посылается запрос такой вариацией
PHP
1
2
$val = 'true';
$pre->bindParam(":where", $val, PDO::PARAM_STR);
- если да, то он вернет пустой массив

а у столбца "учится" тип данных "Логический"
- вот это конечно странно, хотя оставляет надежду на то, что MS как-то по особенному хранит логический тип
0
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66
28.09.2013, 09:11  [ТС]
нет, строка это уже вообще другая таблица, другой столбец. просто на строках пдо тоже не хочет работать

Добавлено через 5 минут
Цитата Сообщение от AccoRd Посмотреть сообщение
в итоге делается вывод "потому что майкрософт"?
или всё таки я еще что-то не правильно делаю, что всё таки более вероятно... наверное...
а может всё же есть какой-то секрет, о котором кто-нибудь, да знает?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
28.09.2013, 09:58
Цитата Сообщение от AccoRd Посмотреть сообщение
fetchAll возвращает мне пустой массив, ошибок не возникает...
ой ли не возникает?
PHP
1
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
0
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66
28.09.2013, 16:03  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
ой ли не возникает?
прям 100%, ну... то есть на моем компе ошибок точно не выдает
Цитата Сообщение от KOPOJI Посмотреть сообщение
PHP
1
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
это я уже написал
Цитата Сообщение от AccoRd Посмотреть сообщение
задал вывод ошибок PDO...
вот прикладываю код в котором ошибок нет и результата нет
но если там поменять :where на true, то результат будет верный
ну опять же на моем компьютере, может, кстати, дело в нём...
Вложения
Тип файла: zip amb.zip (400.9 Кб, 2 просмотров)
0
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66
29.09.2013, 19:16  [ТС]
не работает же? или что-то я не правильно написал?
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
29.09.2013, 21:14
Да, не работает.
И я думаю, что это упирается в формат данных MS Access. Потому что, если похожую таблицу создать в mysql и задать тип данных в столбце "Учится" как BOOLEAN (TINYINT(1)) все прекрасно работает.
1
 Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66
29.09.2013, 21:21  [ТС]
обидно, что придется опять уйти с пдо, в дальнейших планах перевести всю базу таки на мускул, с пдо переход бы получился полегче, название таблиц только переписывать, и некоторые запросы только поправить, а тут, не знаю даже как быть...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.09.2013, 21:21
Помогаю со студенческими работами здесь

PHP PDO проверка на пустой запрос
Подключаюсь к базе: $host = "localhost"; $db = "db"; $user = "user"; $pass = "pass"; $charset = "utf8"; $dsn =...

Не выполняется запрос к БД Access
Не выполняется запрос Insert к БД Access, причем без ошибок, запись просто не добавляется. Ошибок не вижу, может кто заметит и покажет. ...

Не выполняется запрос на обновление в Access
Для изучения Access мне необходимо выполнить ряд лабораторных.Никаких вопросов по созданию базы у меня не возникало до тех пор, пока я не...

Не выполняется 'запрос с условием' из бд MS Access
Есть некая бд, содержащая таблицу "Люди": Я выполняю запрос, в котором описывается, что загружать надо только те строки, в которых Пол...

Запрос в Access глючит: Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
Почему-то выдает синктаксическую ошибку, при попытке обратиться к базe Access: Microsoft OLE DB Provider for ODBC Drivers error...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru