Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
odbc_result() или odbc_fetch_array() возвращают "No tuples available at this result index"
|
|||
|---|---|---|---|
|
#18+
Суть вопроса в следующем по порядку открываем соединение с MSSQL2005 (это неважно так как на 2008 та же хрень!) отправляем на него запрос. $query = "select count(*) from dbo.Admin_name_table where [login] = '".$_REQUEST['new_login']."';"; Получаем результат, проверяем его. if(odbc_result($res, 1) > 0) Всё круто и хорошо, всё работает. Выполняем внутренний код, готовимся к занесению данных о пользователе в таблицу готовим второй запрос: $query = "Declare @a bigint, @tex_id bigint; set @tex_id=(select distinct top 1 [tex_id] from dbo.tex_par_table); set @a=@tex_id+1; while(@a in (select [ID] from dbo.Admin_name_table)) begin; set @a=@a+1; end; select @a as [New_ID];"; который должен вернуть первый свободный ID в таблице. Один единственный результат!!! НО!!! odbc_result($res, 1) выдаёт No tuples available at this result index, что означает что нет результата по данному индексу. В чём здесь может быть проблема, в самом MSSQL всё выполнятется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 17:33 |
|
||
|
odbc_result() или odbc_fetch_array() возвращают "No tuples available at this result index"
|
|||
|---|---|---|---|
|
#18+
Забыл указать запрос выполняю odbc_exec($db_conn, $query); второй запрос пробовал выполнять с помощью odbc_do($db_conn, $query); или odbc_execute(odbc_prepare($db_conn, $query), array()); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 17:39 |
|
||
|
odbc_result() или odbc_fetch_array() возвращают "No tuples available at this result index"
|
|||
|---|---|---|---|
|
#18+
В общем, как выяснилось, полного, корректного описания по ODBC php нет даже на английском языке. Насколько я понял, при выполнении команд, SQL возвращает определенное кол-во результатов, соответствующее кол-ву операндов выполнения, следовательно, требуется выбирать соответствующий идентификатор результата, который нужен, и стараться не пользоваться odbc_result(), так как данный метод берёт тольпо первый результат в списке и подходит для простых запросов, состоящих из одного select.... . Для получения результата сложного запроса, следует использовать odbc_fetch_into() с помощью которого, можно получить массив результатов int odbc_fetch_into ( resource $result_id , array &$result_array [, int $rownumber ] ), соответствующей строки. И даже если не пытаться разобраться в его номере, метод возвращает пустую строку в случае ошибки. Если номер идентификатора верный, то вернёт кол-во результатов в строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2014, 12:24 |
|
||
|
odbc_result() или odbc_fetch_array() возвращают "No tuples available at this result index"
|
|||
|---|---|---|---|
|
#18+
Teslenko Sergey, Дополнительные наблюдения по данному вопросу: В простых запросах типа SELECT при возникновении этой ошибки рекомендуется поменять порядок выдачи результатов, то есть. Сначала [поле 1],[поле 2],[поле 3] Потом [поле 2],[поле 1],[поле 3] При этом следует скомпановать запрос таким образом, чтобы сначала отдать исключительно числовые результаты а потом текст и в конку UTF "(Cast [поле 3] as text) as [поле_3_echo]" Также следует отметить что желательно выполнение select отдельным запросом к серверу, так как, в основном такие ошибки наблюдаются именно при сложных запросах к серверу. Есть ещё один возможность выполнение команд с помощью хранимой процедуры в которую вы передаёте строку запроса, довольно эффективно работает так как промежуточные результаты, типа обновили 1-2-3 строки не выводится и в следствии этого odbc получает единичный ответ от selectов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 12:53 |
|
||
|
odbc_result() или odbc_fetch_array() возвращают "No tuples available at this result index"
|
|||
|---|---|---|---|
|
#18+
Это ты напоролся на особенность ODBC для MS SQL. Когда ты посылаешь пакет команд через ODBC, на сервере создается хранимая процедура с текстом этого батча, выполняется и тут же удаляется. При этом срабатывают все неявные фишки хранимых процедур. В общем, методов лечения тут два: 1) Оформить все что надо в виде нормальной хранимой процедуры и вызывать ее. Это на мой взгляд самое удобное и надежное. 2) Избавится от пакета и запускать все что нужно по очереди из внешнего скрипта. Teslenko SergeyВ общем, как выяснилось, полного, корректного описания по ODBC php нет даже на английском языке. Зато есть MDAC с описанием самого ODBC, а php модуль к нему это почти прямое отображение. Teslenko SergeyНасколько я понял, при выполнении команд, SQL возвращает определенное кол-во результатов, соответствующее кол-ву операндов выполнения,В общем случае это не так. Количество результатов зависит от количества результато-генерирующих запросов. Запросы типа insert/delete/set резултата не генерируют. Но могут генерировать информационные результаты (сколько строк обработано, за какое время, из-за чего обработка остановилась, и тп). И эта информация может выдаваться клиенту как отдельный резалтсет. В MS SQL мире ее обычно выключают через SET NOCOUNT ON. Но это для ленивых. Teslenko Sergey следовательно, требуется выбирать соответствующий идентификатор результата, который нужен, и стараться не пользоваться odbc_result(), так как данный метод берёт тольпо первый результат в списке и подходит для простых запросов, состоящих из одного select.... .А для много-резалтсетных запросов/пакетов/хранимых процедур есть очень простая команда: odbc_next_result(). Получил первый резалтсет, выбрал из него все записи, запросил следующий резалтсет... и так пока odbc_next_result() не ответит: "больше нету". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 00:52 |
|
||
|
odbc_result() или odbc_fetch_array() возвращают "No tuples available at this result index"
|
|||
|---|---|---|---|
|
#18+
White Owl, Спасибо. Посмотрю. Вообще ещё заметил такой момент, что ошибка иногда возникает если в результате выдачи форматы полей идут вперемешку. Например: bigint, text, varchar, int. Во многих случаях проблема решалась перестановкой порядка выдачи результирующего набора полей в запросе и всё. Но это так наблюдение! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2015, 12:44 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38597274&tid=1461811]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 304ms |

| 0 / 0 |
