Здравствуйте! Дано 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. Что делать? В логах НИЧЕГО НЕТ (((
убери жабы "@", это раз PHP: $phonelink=@mssql_connect("mssqlserver","user","pass") or mssqlserver - это что? [sql]WHERE Phone is not null and Phone='790000000'[/sql] если Phone='790000000' то оно точно не null Масло маслянное, это два PHP: $row=mssql_fetch_array($result) это помоему всегда будет тру!!! т.е. бесконечный цикл это ДРАЙ
Не всегда. Когда все строки результата будут обработаны, функция вернет false. Это стандартный способ обработки результатов sql-запроса в php.
Убрал, и что?! Это сути дела не меняет....это раз PHP: $phonelink=@mssql_connect("mssqlserver","user","pass") or Это название секции в fteetds.conf, описывающей конекретный MSSQL сервер [sql]WHERE Phone is not null and Phone='790000000'[/sql] Да хоть сахар сахарный, это имеет значение? Я просто для уменьшения букв вырезал лишнее, пусть там будет что угодно, синтаксис верный?! Результат будет?!
я бы для надежности везде поставил бы проверки PHP: <?php $phonelink=@mssql_connect("mssqlserver","user","pass") or die ("cannot connect"); $result=mssql_select_db("DataBase",$phonelink); if(!$result) { die("не могу выбрать базу данных"); } $query="SELECT TOP 20 * FROM Phones WHERE Phone is not null and Phone='790000000'" ; $result=mssql_query($query,$phonelink); if($result==false) { die("ошибка при выполенении запроса"); } while ($row=mssql_fetch_array($result)) { print $row["Abonent"]." ".$row["Phone"] ; } ?> и еще нужно убедиться, что речь идет об одной и той же таблице вместо своего запроса выполни и выведи на экран запрос $query="SELECT TOP 20 * FROM Имя_Базы_данных.Владелец.Phones WHERE Phone is not null and Phone='790000000'" ; и выполни его с консоли
В консоли выполнял, все работает, подключается, делает выборку и выводит результат. Я просто не знаю уже что делать, тупо переставлять сервер, я думаю глупо, придется переписывать все на перл, в нем пробовать
Если как описано выше, коннект к серверу с именем 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 что возвращает) ну и т.д.