Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 PHP + sqlsrv = Invalid sql_display_size  [new]
ВалерийК
Member

Откуда:
Сообщений: 3
Товарищи помогите. Это мой первый опыт работы с mssql, очень разочарован в этой бд, но делать надо именно на ней..
Вот столкнулся с ошибкой, о которой ничего не смог узнать из поисковиков.

При работе через sqlsrv_ функции (а так же при работе через PDO('sqlsrv...)) вылазит вот такая ошибка
Fatal error: Invalid sql_display_size
Что это за ошибка? Как с ней бороться?

Она вылазит при использовании функции sqlsrv_fetch_array (или Pdo->fetch())
При попытке получить данные из таблицы, содрежащей столбец типа binary (подозреваю что из за этого столбца)

При подключении через odbc, этой ошибки нет, но сейчас стоит задача использовать что то кроме odbc (пока ничего более рабочего не нашёл)

PHP 5.4, MSSQL 2008 R2 x86
23 мар 13, 09:57    [14085547]     Ответить | Цитировать Сообщить модератору
 Re: PHP + sqlsrv = Invalid sql_display_size  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ВалерийК
Это мой первый опыт работы с mssql, очень разочарован в этой бд

Во как. И чем же, например, вы разочарованы?
23 мар 13, 10:26    [14085565]     Ответить | Цитировать Сообщить модератору
 Re: PHP + sqlsrv = Invalid sql_display_size  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
ВалерийК
Вот столкнулся с ошибкой, о которой ничего не смог узнать из поисковиков.
Неужели? Вот, например:
http://stackoverflow.com/questions/13687762/yii-mssql-query-errror
Edit: A quick search on google provides you with tons of valid answers: The most valid answer is that the mssql PDO driver is full of bugs, you could use the ODBC driver which works less buggy.
А вот тут: PHP: How to read VARBINARY fields? упоминается Retrieving Data as a Stream Using the SQLSRV Driver
23 мар 13, 10:49    [14085589]     Ответить | Цитировать Сообщить модератору
 Re: PHP + sqlsrv = Invalid sql_display_size  [new]
ВалерийК
Member

Откуда:
Сообщений: 3
invm
А вот тут: PHP: How to read VARBINARY fields? упоминается Retrieving Data as a Stream Using the SQLSRV Driver


Почитал, нашёл примеры где берётся один конкретный столбец функцией sqlsrv_get_field

А если я хочу получить поля таблицы таким методом
$res = sqlsrv_query($conn, "SELECT * FROM table");
$row = sqlsrv_fetch_array($res);
и не знаю заранее имена и типы получаемых полей, как тогда быть?

Допустим у меня есть рабочий класс extends pdo, который я использую, и тут вдруг надо вместо него использовать класс работающий с sqlsrv_ функциями. Т.е. не меняя ничего в движке сайта кроме одного класса работы с бд.
С pdo('odbc') всё норм работает, как теперь правильно делать запросы через sqlsrv_query чтоб оно без ошибок возвращала столбцы любого типа?
23 мар 13, 11:27    [14085631]     Ответить | Цитировать Сообщить модератору
 Re: PHP + sqlsrv = Invalid sql_display_size  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
ВалерийК
С pdo('odbc') всё норм работает, как теперь правильно делать запросы через sqlsrv_query чтоб оно без ошибок возвращала столбцы любого типа?
Спросите в форуме по используемому языку программирования.

При чём тут MSSQL, в котором вы разочарованы, в нём нету никакого "sqlsrv_query".
23 мар 13, 11:33    [14085639]     Ответить | Цитировать Сообщить модератору
 Re: PHP + sqlsrv = Invalid sql_display_size  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
ВалерийК
А если я хочу получить поля таблицы таким методом
$res = sqlsrv_query($conn, "SELECT * FROM table");
$row = sqlsrv_fetch_array($res);
и не знаю заранее имена и типы получаемых полей, как тогда быть?
Простота и легкость такого подхода обманчива. Для начала, попробуйте задуматься, что произойдет, если поменяется порядок столбцов в результирующем наборе.
23 мар 13, 11:43    [14085662]     Ответить | Цитировать Сообщить модератору
 Re: PHP + sqlsrv = Invalid sql_display_size  [new]
ВалерийК
Member

Откуда:
Сообщений: 3
invm
Простота и легкость такого подхода обманчива. Для начала, попробуйте задуматься, что произойдет, если поменяется порядок столбцов в результирующем наборе.


Ничего не поменяется. Я получаю ассоциативный массив и использую его
sqlsrv_fetch_array($conn, SQLSRV_FETCH_ASSOC);
В примере выше не показал этого чтоб пост лишней инфой не захломлять.
23 мар 13, 11:46    [14085674]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить