Аватар для AccoRd
4 / 4 / 0
Регистрация: 19.10.2010
Сообщений: 66

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

25.09.2013, 22:29. Показов 4512. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru