Значиться на удаленном сервере крутиться под W2k3 MSSQL2005 вместе с apache+php, подключаюсь к ним из скрипта как mssql_connect, далее выбираю базу и формирую простой запрос к свое базе [sql]Select * from users where code=55[/sql](code это столбец типа int NOT NULL) Возвращается пустая строка, хотя запись с таким значением code точно есть. Далее, подменяем запрос на [sql]Select * from users where code>=55[/sql] РАБОТАЕТ (выводит все нужные строки) [sql]Select * from users where code like '%55'[/sql] НЕ РАБОТАЕТ Ладно, дальше взял другой int столбец Id_Deportament в то же таблице users [sql]Select * from users where Id_Deportament=12 [/sql] РАБОТАЕТ!!! [sql]Select * from users where Id_Deportament>=12[/sql] РАБОТАЕТ!!! [sql]Select * from users where Id_Deportament like '%12'[/sql] РАБОТАЕТ!!! Идем дальше... В другой таблице complect той же базы тоже есть столбец с названием code(int NOT NULL), проверяем [sql]Select * from complect where code=34[/sql] НЕ РАБОТАЕТ! [sql]Select * from complect where code>=34[/sql] РАБОТАЕТ! [sql]Select * from complect where code like '%34'[/sql] РАБОТАЕТ!!!(черт меня подери) Топаю ногами к серверу, открываю менеджмент, формирую самый первый запрос [sql]Select * from users where code=55[/sql] РАБОТАЕТ!!! (в шоке уползаю) Короче болезненно реагирует на текст в запросе "...code=..." Как я понимаю дело в связке mssql-php-apache? И что это может быть? Вот что интересно, php при неудачном запросе выкидывает в лог строку мол, не могу выбрать базу, нету такой, а при удачной транзакции все чисто.
Боюсь ошибиться, но это может быть служебное слово (уж простите, не работал с mssql) Обычно служебные слова, если обозначают имена таблиц или полей заключаются в специальные символы. Для MySQL это символ апострофа ` UPD> и еще. Разместите здесь ответ следующего запроса: [sql]DESCRIBE `table_name`[/sql]
Уж простите я уже дома, ниче скинуть не могу, про служебные слова думал, но почему тогда работает code>=?
как я понял нужно это CREATE TABLE [dbo].[Users]( Код (Text): [int] NOT NULL, [ID_Deportament] [int] NULL, [F_Name] [varchar](40) NULL, [I_Name] [varchar](40) NULL, [O_Name] [varchar](40) NULL, [Kab_N] [char](6) NULL, [Phone] [varchar](10) NULL, [Raspol] [int] NULL, [Deleted] [int] NULL, [Key_Zvan] [int] NULL, [Utch_Kart] [varchar](50) NULL ) ON [PRIMARY]
offmind Предположу, тогда, что проблема с типами данных. PHP: <?php ### Field 'emailaddress' is of data type TEXT in the SQL database # This would not work! $sql = "SELECT * FROM accounts WHERE emailaddress = [email='test@test.com]'test@test.com[/email]'"; # Converting the data type inline solved the problem $sql = "SELECT * FROM accounts WHERE CONVERT( VARCHAR, emailaddress ) = [email='test@test.com]'test@test.com[/email]'"; ?> [sql]SELECT ... code='55'[/sql] Так можно?
http://www.frentonline.com/Knowledgebase/Development/SQLExpress/Reservedwords/tabid/366/Default.aspx здесь список зарезервированных mssql слов, code там нет завтра буду после обеда ковырять в сторону apache и php_mssql спасибо за отклик
Поковырял.....Обнаружил что при подстановке code>=... выбрасывает строки, да не все, первую пропускает, ту которая "равно". Видимо поэтому и при "=" выдает пустую строку. Цикл вывода таблицы правильный, 100 раз проверил
Ну как не понял? При условии code>=25 должны выводиться строки с code большим или равным 25,так? А у меня при таком условии выводятся строки только БОЛЬШЕ это значения(например 25), а та что равна пропускается. В общем проблема решилась установкой модуля sqlsrv_ts для php от Microsoft.
Re: не работает запрос вида select * from table where para=s нечто похожее: Apache, PHP5, удаленный сервер MSSQL2000 как и у offmind -- [sql]Select * from table1 where SP4840=11[/sql] не возвращает ничего а [sql]Select * from table1 where SP4840 like '%11' [/sql] работает нормально кстати тоже есть столбец с именем CODE, однако по нему запросу проходят на ура, как и по другим столбцам
Re: не работает запрос вида select * from table where para=s Я так понимаю, что не "возвращает ничего", а возвращает пустую строку, так? А при таком запросе первую строку выводит или тоже пропускает?