|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Смотрю в этой ссылке, так как другую не нашел http://docwiki.embarcadero.com/InterBase/XE7/en/Isc_dsql_execute2() Думаю поведение одинаковое. Получается что если если запрос типа select и в качестве out_xsqlda передаем NULL то он будет открывать курсор и дальше как при обычный execute, можно фетчить? Eсли нас не интересует результат, можно туда на все случаи отправить NULL в isc_dsql_prepare и потом в isc_dsql_execute2? Я тестировал на FB2.5, ошибок не наблюдаю, но хочется уточнить. Если можно с NULLом то это будет работать на все распространенные разновидности FB и IB? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2016, 19:53 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Dorin MarcociEсли нас не интересует результат, можно туда на все случаи отправить NULL в isc_dsql_prepare и потом в isc_dsql_execute2? Если ты будешь выполнять select, то можно, но чтобы результат выборки никого не интересовал?.. В прочих случаях ты должен получить ошибку и если клиент двойки её не даёт, значит попробуй с тройкой и четвёркой. Во всяком случае, я кодил для такого случая возвращение ошибки собственными руками, только не помню удалось ли мне пропихнуть это в основной репозиторий. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2016, 20:16 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЕсли ты будешь выполнять select, то можно, но чтобы результат выборки никого не интересовал?.. Там просто такая реализация драйвера, для метода exec(). http://php.net/manual/en/pdo.exec.php И интересуют все типы стэйтментов, если можно пихать там NULL, получается что нет, да? Я пробовал select и insert и все прошло гладко. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2016, 20:37 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Dorin MarcociИ интересуют все типы стэйтментов, если можно пихать там NULL, получается что нет, да? Лучше не рисковать. Получи тип запроса через isc_dsql_sql_info(isc_info_sql_stmt_type) и на основании результата решай что и как вызывать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2016, 20:56 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Тоесть можно всегда использовать isc_dsql_execute2, но если тип "select" то обязательно передать NULL в out_xsqlda? Или вообще определить, вызвать isc_dsql_execute или isc_dsql_execute2? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2016, 11:43 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Dorin MarcociТоесть можно всегда использовать isc_dsql_execute2, но если тип "select" то обязательно передать NULL в out_xsqlda? Ну, поскольку ты не знаешь почти ничего о запросе, то да. isc_dsql_execute как раз и вызывает isc_dsql_execute2 с NULL вместо out_sqlda. Можешь посмотреть в исходниках. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2016, 12:37 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, спасибо за разъяснение! Пока в FB исходников не копался :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2016, 12:44 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Dorin MarcociТам просто такая реализация драйвера, для метода exec(). http://php.net/manual/en/pdo.exec.php И интересуют все типы стэйтментов, если можно пихать там NULL, получается что нет, да? Я пробовал select и insert и все прошло гладко. а теперь попробуй insert ... returning я уже приводил ссылку на форум Lazarus, и если ему верить то в 2.5 ins/del/upd ... returning через execute Больше не работает, в 2.1 работало - а в 2.5 порядок навели Я где-то осенью тут топик создавал про API - там была ссылка ,м.б. найдешь если инетресно ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2016, 13:14 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Arioch, да, "insert returning" и "execute procedure" только через execute2. Это обсуждалось в соседнем топике. pdo.exec() это только имя метода на PHP уровне, который выполняет (любой) стэйтмент, а возвращает только affected rows. Через execute2 можно выполнить все типы стэйтментов (кроме create database и set transaction), если правильно задать out_xsqlda, как я понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2016, 13:54 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Dorin Marcoci, насколько я помню, out_xsqlda задаётся только в том случае, когда возвращается не более одной записи. Это: execute procedure ... returning_values ... insert\update\delete ... returning ... singleton select singleton execute block singleton означает, что запрос гарантированно вернёт не более одной записи, если есть вторая запись, то вернётся ошибка (isc_sing_select_err). Поэтому нужно понимать: если указан не нулевой out_xsqlda, то движок считает, что запрос - singleton и делает соотв. проверку. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2016, 14:08 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
а если менее одной записи, то другая ошибка/статус ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2016, 14:18 |
|
Про isc_dsql_execute2
|
|||
---|---|---|---|
#18+
Dorin MarcociЧерез execute2 можно выполнить все типы стэйтментов (кроме create database и set transaction) С предварительным препарированием create database будут сложности, а set transaction - почему нет?.. Ariochа если менее одной записи, то другая ошибка/статус ? Да - isc_stream_eof. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2016, 14:29 |
|
|
start [/forum/topic.php?desktop=1&fid=40&tid=1561812]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 264ms |
total: | 404ms |
0 / 0 |