powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / where field in (:var) bind
14 сообщений из 14, страница 1 из 1
where field in (:var) bind
    #37994058
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может я конечно ерунду спрашиваю
Как правильно забаиндить список в переменную

например есть запрос
Код: plsql
1.
select * from sys.dba_users where username in ('sys','db',.......)



нужно чтоб через
Код: plsql
1.
select * from sys.dba_users where username in :userlist

работало

Пытаюсь провернуть сие через oci_bind_array_by_name
но что то пока не получается

Кто-нибудь что-нибудь похожее делал?
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37994114
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max ZemaN,

Я так понимаю вам к ораклистам надо
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37994121
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max ZemaN,

Напрямую - никак.
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37994805
Bednii_Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Max ZemaNМожет я конечно ерунду спрашиваю
Как правильно забаиндить список в переменную

например есть запрос
Код: plsql
1.
select * from sys.dba_users where username in ('sys','db',.......)



нужно чтоб через
Код: plsql
1.
select * from sys.dba_users where username in :userlist

работало

Пытаюсь провернуть сие через oci_bind_array_by_name
но что то пока не получается

Кто-нибудь что-нибудь похожее делал?

Как нассчет PDO ?
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37994806
Bednii_Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bednii_Student,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city' => 'Cardiff' );  
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (:name, :addr, :city)");  
$STH->execute($data);

# набор данных, которые мы будем вставлять
$data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');  
  
$STH = $DBH->prepare("INSERT INTO folks (name, addr, city) values (?, ?, ?)");  
$STH->execute($data);
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37994827
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том что заранее не известно кол-во элементов в списке
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37994831
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Судя по плану выполнения запросов с where in список в скобках заменяется самим ораклом на соответствующее логическое выражение
Но я нашел как это обойти
select * from table field in (select :list from dual) в данном случае из select :list from dual строится представление или временная таблица Это как раз то что нужно, проблема в самом подзапросе
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37994842
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не делайте так.
Подзапрос бдует выполняться столько раз, сколько записей в таблице table
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37994855
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett,
Не критично
все данные в памяти и не миллион же записей

проблема в том что не выполняется ничего oci_execute(): ORA-01484: arrays can only be bound to PL/SQL statements

Не уже никак нельзя запросы типа "select * from table where field in (...." через bind прогнать ???

Сейчас тупо прогоняю массив через join и вставляю результат в тело запроса
Это совсем не есть хорошо
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37994867
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть создание временно таблице, наполнение ее данными и потом использование их разово (?) в запросе, по вашему, куда лучше?
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37995088
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettПодзапрос бдует выполняться столько раз, сколько записей в таблице tableПочему? Это же Оракл, а не MySQL.
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37995092
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max ZemaN,

А зачем вам вообще биндить список с произвольным числом значений? Чем простая конкатенация не устраивает?
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37995583
Max ZemaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
В интернете народ ушлый
Список проверять надо на отсутствие всяких бяк
Зарегистрируется какой-нибудь ");truncate table very_important_data;
В данном случае проверить не сложно но 100% гарантии уже нет
Через bind оно как-то надежнее

Вообще основная причина это то что для таких запросов приходится "нестандартный" код писать

картина такая
[CONF]
Код: php
1.
2.
3.
$_SQL['get_users]<<<END
select bla bla bla from bla bla bla where :bla :bla :bla
END


и так еще десятка два запросов
подготавливается привязывается и выполняется запрос одной строчкой
Код: php
1.
2.
3.
4.
5.
6.
$vars['bla']='username';
$DB->query($_SQL['get_users],$vars);
..
$DB->query($_SQL['get_prices],$vars);
..
$DB->query($_SQL['get_debtors],$vars);



И тут запрос с where in который в эту процедурку "не лезет"
Нашел уже выход из положения
Код: php
1.
$DB->query(eval($_SQL['get_listmatch]),$list);

но вот если бы через bind получилось то вообще б здорово было
...
Рейтинг: 0 / 0
where field in (:var) bind
    #37996577
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то же раньше жили без параметризированных запросов.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / where field in (:var) bind
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]