За последние 24 часа нас посетили 19467 программистов и 1601 робот. Сейчас ищут 1074 программиста ...

mssq_query рушит скрипт

Тема в разделе "PHP и базы данных", создана пользователем hugo-stiglits, 13 дек 2010.

  1. hugo-stiglits

    hugo-stiglits Активный пользователь

    С нами с:
    13 дек 2010
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте!
    Дано FreeBSD 8.1 + PHP5 + FreeTDS
    есть скрипт
    Код:

    <?php
    $phonelink=@mssql_connect("mssqlserver","user","pass") or
    die ("cannot connect");
    mssql_select_db("DataBase",$phonelink);
    $query="SELECT TOP 20 * FROM Phones WHERE Phone is not null and Phone='790000000'" ;
    $result=mssql_query($query,$phonelink);
    while ($row=mssql_fetch_array($result)) {
    print $row["Abonent"]." ".$row["Phone"] ;
    }
    ?>

    Если я запускаю этот скрипт из консоли, то он работает, выводит результат, но как только я обращаюсь к нему через WEB то Apache выводит пустую страницу, если поставить в начале срипта Print "Hello!";, то все равно будет пустая страница, до тех пор пока я не уберу вызов mssq_query(). Т.е как только появляется вызов этой функции в скрипте, то сразу выводится пустая страница, независимо что было до этого вызова! В php.ini стоит error_reporting=E_ALL log_errors=On. Что делать? В логах НИЧЕГО НЕТ (((
     
  2. asik

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

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    убери жабы "@", это раз
    PHP:
    1. $phonelink=@mssql_connect("mssqlserver","user","pass") or
    mssqlserver - это что?
    [sql]WHERE Phone is not null and Phone='790000000'[/sql]
    если Phone='790000000' то оно точно не null Масло маслянное, это два
    PHP:
    1. $row=mssql_fetch_array($result)
    это помоему всегда будет тру!!! т.е. бесконечный цикл это ДРАЙ
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Не всегда. Когда все строки результата будут обработаны, функция вернет false. Это стандартный способ обработки результатов sql-запроса в php.
     
  4. asik

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

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    да, сори правда не моя =)
     
  5. hugo-stiglits

    hugo-stiglits Активный пользователь

    С нами с:
    13 дек 2010
    Сообщения:
    3
    Симпатии:
    0
    Убрал, и что?! Это сути дела не меняет....это раз
    PHP:
    1. $phonelink=@mssql_connect("mssqlserver","user","pass") or
    Это название секции в fteetds.conf, описывающей конекретный MSSQL сервер

    [sql]WHERE Phone is not null and Phone='790000000'[/sql]
    Да хоть сахар сахарный, это имеет значение? Я просто для уменьшения букв вырезал лишнее, пусть там будет что угодно, синтаксис верный?! Результат будет?!
     
  6. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    я бы для надежности везде поставил бы проверки

    PHP:
    1.  
    2. <?php
    3. $phonelink=@mssql_connect("mssqlserver","user","pass") or  die ("cannot connect");
    4. $result=mssql_select_db("DataBase",$phonelink);
    5. if(!$result)
    6. {
    7.    die("не могу выбрать базу данных");
    8. }
    9. $query="SELECT TOP 20 * FROM Phones WHERE Phone is not null and Phone='790000000'" ;
    10. $result=mssql_query($query,$phonelink);
    11. if($result==false)
    12. {
    13.    die("ошибка при выполенении запроса");
    14. }
    15. while ($row=mssql_fetch_array($result)) {
    16. print $row["Abonent"]." ".$row["Phone"] ;
    17. }
    18. ?>
    19.  
    и еще нужно убедиться, что речь идет об одной и той же таблице
    вместо своего запроса выполни и выведи на экран запрос
    $query="SELECT TOP 20 * FROM Имя_Базы_данных.Владелец.Phones WHERE Phone is not null and Phone='790000000'" ;

    и выполни его с консоли
     
  7. hugo-stiglits

    hugo-stiglits Активный пользователь

    С нами с:
    13 дек 2010
    Сообщения:
    3
    Симпатии:
    0
    В консоли выполнял, все работает, подключается, делает выборку и выводит результат. Я просто не знаю уже что делать, тупо переставлять сервер, я думаю глупо, придется переписывать все на перл, в нем пробовать
     
  8. uri

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

    С нами с:
    3 сен 2009
    Сообщения:
    43
    Симпатии:
    1
    Если как описано выше, коннект к серверу с именем MSSQLSERVER из скрипта есть могу посоветовать проделать след. манипуляции.

    Во-первых, убедись, что до сервера доходит запрос - на серваке MSSQLSERVER профайлер запусти, выполни запрос из скрипта и увидишь что и как доходит до сервера
    Во-вторых, убедись, поля с именами Abonent и Phone (причем, обращаю внимание на регистр символов в названиях полей!!) действительно есть в таблице Phones. Вместо "SELECT TOP 20 * FROM Phones" используй "SELECT TOP 20 Abonent, Phone FROM Phones" - т.е. указывай имена полей явно вместо *, тогда ТОЧНО возвратится набор записей из полей с указанными именами (при условии существования таблицы Phones, иначе ошибка, которую ты давишь этим - @).
    В-третьих, с использованием фильтра в условии WHERE возвращается не пустой набор данных, т.е. цикл while в скрипте выполняется хоть раз?.

    Совет. Для отладки ставь больше echo-выводов. Сформировал строку запроса - выведи его echo($query);. Зашел в цикл - например, echo('я в цикле, запись номер - '.$counter);где $counter - надо завести как счетчик, не зашел - проверяй результат и опять вывод (см. справку по mssql_query что возвращает) ну и т.д.