Я обнаружил проблему при работе с функциями php ODBC. odbc_fetch_array и odbc_fetch_object выходят из строя, когда запрос имеет соединение с таблицей с одинаковым именем столбца, даже если это поле исключено из выбора поля:
например
$con = odbc_connect("Driver={SQL Server Native Client 11.0};Server=$serverName;Database=$db;", 'user', 'pass',SQL_CUR_USE_ODBC);
$query="SELECT table1.field1, table1.field2 from table1 JOIN table2 ON table1.field1=table2.field1";
$result = odbc_exec($con,$query);
$a=odbc_fetch_array($result);
код выше генерирует предупреждение:
Предупреждение: odbc_fetch_array() [function.odbc-fetch-array]: ошибка SQL: [Microsoft] [Собственный клиент SQL Server 10.0] [SQL Server] имя столбца "неоднозначно". Состояние SQL 37000 в SQLGetData
Ошибка была бы в порядке, если бы я выбрал поле1, не указав из какой таблицы, но даже если он явно не работает. единственным "обходным решением", который я нашел до сих пор, является удаление поля из выбранных полей или изменение имени поля из второй таблицы
Я попытался: и SQL Server Native Client 10.0, и SQL Server Native Client 11.0 SQL Server 2008 Php 5.3.2 через Windows
PD: Если у кого-то есть какие-либо айды без использования расширения sqlsrv или mssqL, это будет здорово
Наконец, я узнал, что проблема возникла из-за столбца с "текстовым" типом в базе данных SQL-сервера, odbc_fetch_array терпит неудачу, когда запрос имеет одно или несколько соединений к таблицам с одинаковым именем столбца, а в выбранных полях вы вводите тип текста колонка.
Является ли это опечаткой при написании сообщения, это выглядит странно table1.field1=table2=field1
. Это должно быть table1.field1 = table2.field1
SELECT table1.field1, table1.field2 from table1 JOIN table2
ON table1.field1=table2=field1
<--Here