За последние 24 часа нас посетили 17858 программистов и 1652 робота. Сейчас ищут 1144 программиста ...

не работает запрос вида select * from table where para=smth

Тема в разделе "MSSQL", создана пользователем offmind, 15 апр 2008.

  1. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    Значиться на удаленном сервере крутиться под 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 при неудачном запросе выкидывает в лог строку мол, не могу выбрать базу, нету такой, а при удачной транзакции все чисто.
     
  2. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Уважаемый offmind!
    Проявите немного уважения. Пожалуйста, оформите SQL запросы с помощью тэгов.
     
  3. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Боюсь ошибиться, но это может быть служебное слово (уж простите, не работал с mssql)
    Обычно служебные слова, если обозначают имена таблиц или полей заключаются в специальные символы.
    Для MySQL это символ апострофа `

    UPD> и еще. Разместите здесь ответ следующего запроса:
    [sql]DESCRIBE `table_name`[/sql]
     
  4. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    Уж простите я уже дома, ниче скинуть не могу, про служебные слова думал, но почему тогда работает code>=?
     
  5. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    А если выполнить запрос с code=54 ошибка останется той же? ;)
     
  6. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
  7. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Пробовали?
     
  8. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    да догадался
    еще пробовал
    PHP:
    1. $ss="code";
    2. $query="select * from users where ".$ss."=55";
     
  9. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    как я понял нужно это

    CREATE TABLE [dbo].[Users](
    Код (Text):
    1.  [int] NOT NULL,
    2.     [ID_Deportament] [int] NULL,
    3.     [F_Name] [varchar](40) NULL,
    4.     [I_Name] [varchar](40) NULL,
    5.     [O_Name] [varchar](40) NULL,
    6.     [Kab_N] [char](6) NULL,
    7.     [Phone] [varchar](10) NULL,
    8.     [Raspol] [int] NULL,
    9.     [Deleted] [int] NULL,
    10.     [Key_Zvan] [int] NULL,
    11.     [Utch_Kart] [varchar](50) NULL
    12. ) ON [PRIMARY]
     
  10. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    offmind
    :)

    Предположу, тогда, что проблема с типами данных.
    PHP:
    1. <?php
    2. ### Field 'emailaddress' is of data type TEXT in the SQL database
    3.  
    4. # This would not work!
    5. $sql = "SELECT * FROM accounts WHERE emailaddress = [email='test@test.com]'test@test.com[/email]'";
    6.  
    7. # Converting the data type inline solved the problem
    8. $sql = "SELECT * FROM accounts WHERE CONVERT( VARCHAR, emailaddress ) = [email='test@test.com]'test@test.com[/email]'";
    9. ?>
    10.  
    [sql]SELECT ... code='55'[/sql]
    Так можно?
     
  11. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
     
  12. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    так можно но все равно не работает
     
  13. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    нет, нечувствителен
     
  14. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    offmind
    Жаль сервера под рукой нет... Проблема явно ведь на поверхности лежит :(
    Будем ждать Гуру
     
  15. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
  16. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Держите в курсе
     
  17. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    Поковырял.....Обнаружил что при подстановке code>=... выбрасывает строки, да не все, первую пропускает, ту которая "равно". Видимо поэтому и при "=" выдает пустую строку. Цикл вывода таблицы правильный, 100 раз проверил
     
  18. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    offmind
    Ничего не понял
     
  19. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    Ну как не понял?
    При условии code>=25 должны выводиться строки с code большим или равным 25,так?
    А у меня при таком условии выводятся строки только БОЛЬШЕ это значения(например 25), а та что равна пропускается.
    В общем проблема решилась установкой модуля sqlsrv_ts для php от Microsoft.
     
  20. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    o_O
     
  21. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    http://msdn2.microsoft.com/en-us/library/cc296221.aspx

    При этом драйвере все работает
     
  22. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    я удивлен
     
  23. Akelarus

    Akelarus Активный пользователь

    С нами с:
    10 июн 2008
    Сообщения:
    1
    Симпатии:
    0
    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, однако по нему запросу проходят на ура, как и по другим столбцам
     
  24. offmind

    offmind Активный пользователь

    С нами с:
    11 апр 2008
    Сообщения:
    15
    Симпатии:
    0
    Re: не работает запрос вида select * from table where para=s

    Я так понимаю, что не "возвращает ничего", а возвращает пустую строку, так?

    А при таком запросе первую строку выводит или тоже пропускает?