Я хочу повторить некоторые значения запроса
while(odbc_fetch_row($tableX))
{
for($i=1;$i<=odbc_num_fields($tableX);$i++)
{
if ($i==1)
{
echo odbc_result($tableX,1); //echoed
echo odbc_result($tableX,2); //echoed
echo odbc_result($tableX,21); //echoed
echo odbc_result($tableX,22); //echoed
var_dump(odbc_result($tableX,22)); //returns values
}
else if ($i==2)
{
echo odbc_result($tableX,$i).'++';
var_dump(odbc_result($tableX,22)); //returns bool(false) and empty rows
}
else if ($i==3)
{
echo odbc_result($tableX,$i).'+';
}
else
{
echo odbc_result($tableX,$i); //($tableX,1) ($tableX,2) ($tableX,3) echoed ($tableX,21) ($tableX,22) not echoed
}
}
}
Как я указал в комментариях, некоторые из odbc_result вызывают ошибку:
не могу получить данные столбца №21 не могу получить данные столбца №22
Я (не уверен, но) думаю, что проблема в следующем:
Ошибка возникает, если параметр номера столбца для поля меньше один или превышает количество столбцов (или полей) в текущем записывать. Точно так же возникает ошибка, если поле с именем, не одно из имен полей запрашиваемой таблицы (таблиц).
Тем не менее, я не мог видеть причину. Заранее спасибо.
Обновлено: Else работает, если я удалю эхо под if ($i==1)
Оба типа данных 21 и 22 - NCLOB.
он возвращает 27 @ADyson
Спасибо. Итак, вы говорите, что когда вы пишете odbc_result($tableX,22), оно выводит значение, но если вы пишете odbc_result($tableX,$i), это не так, даже когда $i имеет значение 22? Вы в этом полностью уверены? Потому что это не имеет никакого смысла
@ADyson верно!? это расстраивает. Я также набрал echo odbc_result($tableX,22); под else, все равно выдает ошибку.
@wittream может существовать, но имеет ли оно значение во всех строках результатов? Кроме того, откуда именно приходят эти сообщения «не удается получить данные ...»? Это предупреждения PHP, уведомления или что? php.net/manual/en/function.odbc-result.php упоминает только, что возвращает false, если есть ошибка, или null, если столбец пуст. (Если вы временно используете var_dump вместо echo для тестирования, вы сможете точно увидеть, какой вывод он возвращает в этих случаях — например, false и null обычно не видны при использовании echo)
@ADyson ADyson, вы правы, значение столбца 22 не существует для каждой строки (некоторые из них равны нулю), но оно не отображается для тех, у которых есть значение. Я проверил еще раз, и это предупреждение Warning: odbc_result(): Cannot get data of column #21 odbc_result(): Cannot get data of column #22 для строки под else.var_dump результаты bool(false) для 21 и 22 для некоторых строк (вероятно, те, которые имеют нулевое значение) и пустые для других.






Исправлено путем преобразования NCLOB (odbc_result($tableX,21) and odbc_result($tableX,22)) в nvarchar
CAST(BINTOSTR(CAST("COLUMNNAME" AS binary)) as nvarchar)
Какое значение возвращает
odbc_num_fields($tableX)?