Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > is not a valid MySQL result


Автор: kelario 6.2.2010, 22:53
Добрый вечер!

У меня есть скрипт,который абсолютно нормально работает везде,кроме ИЕ6.

В IE6 вылетает следущее:

Код

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in 
F:\Program Files\Apache Software Foundation\Apache2.2\htdocs\search\search.php on line 55



Понятно,что HTML и CSS ИЕ6  понимает по своему,но при чем тут MySql ?

Сама строчка 55 :

Код

while ($line=mysql_fetch_array($search, MYSQL_NUM)) {



и все остальные действия с sql в правильном порядке :
Код

 $con = mysql_connect('localhost', 'usr', 'pass');
   if (!$con) {
      die("Cant connect to the DataBase");
   }else {
      mysql_select_db('author',$con);
код без обращения к mysql
 $query = 'SELECT * FROM `shops` WHERE ' . implode('AND', $fields) . '';
$search = (mysql_query($query,$con)) ;

while ($line=mysql_fetch_array($search, MYSQL_NUM))
{
код без обращения к mysql
}
mysql_close($con); 




Спасибо!! 

Автор: Veve 6.2.2010, 23:25
Чисто визуально, есть два странных момента:

Код

$search = (mysql_query($query,$con)) ;


Скобки непонятно зачем. Хотя думаю это некритично.

А вот второй более непонятный момент. И скорее всего из-за него ошибка.

Код

while ($line=mysql_fetch_array($search, MYSQL_NUM))
mysql_close($con); 
}


Вы в цикле закрываете соединение с базой: mysql_close($con); 

Автор: kelario 6.2.2010, 23:28
Спасибо за ответ,но mysql_close находиться за пределами цикла.Иначе бы не работало везде smile 

Автор: IgorIV 6.2.2010, 23:57
А echo $query - не пробовал?
Скорее всего браузер не отправляет данные.

Автор: Simpliest 7.2.2010, 00:54
плюс данный код
Цитата(kelario @  6.2.2010,  21:53 Найти цитируемый пост)
$query = 'SELECT * FROM `shops` WHERE ' . implode('AND', $fields) . '';

должен выдать нечто крайне странное после WHERE smile

Автор: TName 7.2.2010, 02:53
Согласен с пердыдущим оратором. И содержимое $fields - в студию.
Есть предположение, что там есть данные из $_GET, который от IE6 может быть неадекватным.

Автор: kelario 7.2.2010, 11:43
Цитата

А echo $query - не пробовал?


Resource ID#4 smile

mysql_error выдает 
Цитата

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


Цитата

И содержимое $fields - в студию.



Код

$fields = array();
if( $name != '' )
    $fields[] = '`name` = "' . mysql_real_escape_string($name) . '"';
if( $category != '' )
    $fields[] = '`category` = "' . mysql_real_escape_string($category) . '"';   

if( $country != '' )
    $fields[] = '`country` = "' . mysql_real_escape_string($country) . '"';
if( $city != '' )
    $fields[] = '`city` = "' . mysql_real_escape_string($city) . '"';

 
 $query = 'SELECT * FROM `shops` WHERE ' . implode('AND', $fields) . '';


Автор: Photon 7.2.2010, 11:55
А откуда берутся всякие $name, $category и т.п.?
Если это приходит из браузера, то для начала стоит попробовать использовать $_REQUEST['name'] и т.п.

Автор: TName 7.2.2010, 12:10
на мой скромный взгляд это вобще должно выглядеть так:
Код

$fields = array();
if( $name != '' )
    $fields[] = "name = '" . $name . "'";
if( $category != '' )
    $fields[] = "`category` = '" . $category . "'";   

if( $country != '' )
    $fields[] = "`country` = '" . $country . "'";
if( $city != '' )
    $fields[] = "`city` = '" . $city . "'";

 
 $query = "SELECT * FROM `shops` WHERE " . implode(' AND ', $fields);
$query = mysql_real_escape_string($query);


Обрати внимание на пробелы вокруг AND в запросе, отсутсвие добавления пустой строки в конце запроса (зачем оно?) и то, что вся строка в двойных ковычках, а строковые переменные в одинарных (хотя это не принципиально, по-моему).
Если предполагается наличие спец. символов во входных данных, то к переменным можно addslashes() применить.

Автор: kelario 7.2.2010, 12:11
Цитата

А откуда берутся всякие $name, $category и т.п.? 


Да,из броузера.

Код

$name= ($_POST['name']);
   $category = ($_POST['category']);
   $country = ($_POST['country']);
     $city = ($_POST['city']);
   


Поменял на $_REQUEST ,не помогает :(

Автор: IgorIV 7.2.2010, 12:18
kelario, бери 2 браузера и сравнивай.
var_dump($_POST);
var_dump($fields);
echo $query; // здесь все-таки должна быть строка

Автор: kelario 7.2.2010, 12:32
Цитата

kelario, бери 2 браузера и сравнивай.


IE6:

Код

array(2) { ["category_x"]=> string(2) "54" ["category_y"]=> string(2) "46" } array(0) { } 


Firefox:

Код

array(3) { ["category_x"]=>  string(2) "76" ["category_y"]=>  string(2) "89" ["category"]=> 
 string(9) "education" } array(1) { [0]=>  string(24) "`category` = "education"" }


Цитата

на мой скромный взгляд это вобще должно выглядеть так:


Код

You have an error in your SQL syntax; check the manual that corresponds to your MySQL
 server version for the right syntax to use near '\'education\''



Теперь файрфоксу тоже не нравиться smile



Автор: IgorIV 7.2.2010, 12:39
kelario, ну и?
Ты видишь что у тебя в IE нет переменной $fields? IE не посылает category.

Автор: kelario 7.2.2010, 13:19
Цитата

Ты видишь что у тебя в IE нет переменной $fields? IE не посылает category. 


Да,заметил.Но какой синтаксис тогда правильный ?(или дело вообще не в этом ? )  Вариант Т-нейма к сожалению не работает.

Автор: TName 7.2.2010, 13:22
О, Боги! Иногда руки опускаются....
Вот по развитию диалога создается впечатление, что здесь онлайн дебагер.
Ан, нет! Сказано: браузеры (а тем более IE6) передают переменные из формы по-разному. Ищи косяки во входных данных. Проблема с запросом? Проверь синтаксис (правила однозначные). Каждый шаг мониторь. Вывести echo $var; не сложно или var_dump($var).

Получив здесь готовый ответ, ты не получишь опыта. А времени на объяснение ситуации потратишь столько же, сколько на самостоятельный поиск и работу.

Аналогий и примеров приведено, IMHO, достаточно.

Автор: IgorIV 7.2.2010, 13:24
Дело в том, что (телепатия) твой JS скрипт неправильно выполняется. Разберись сначала с формой, чтобы все значения отправлялись на сервер. PHP здесь пока не причём.

Автор: kelario 7.2.2010, 14:31
Цитата

Вот по развитию диалога создается впечатление, что здесь онлайн дебагер.
Ан, нет! Сказано: браузеры (а тем более IE6) передают переменные из формы по-разному. Ищи косяки во входных данных. 




Цитата

Дело в том, что (телепатия) твой JS скрипт неправильно выполняется. Разберись сначала с формой, чтобы все значения отправлялись на сервер. PHP здесь пока не причём.



Да,все оказалось именно так! Данные даже не приходили в ИЕ.

Проблема была в хтмл форме.Ие не понимает input type=image.На то он и ИЕ !

Спасибо всем огромное за советы!

Автор: Photon 10.2.2010, 23:52
Как это не понимает? Всё он понимает..
Просто как и положено, отправляет не name = value,  а координаты в пределах картинки..
Вот откуда category_x и category_y
У input type='image' нет атрибута value, а то, что другие браузеры почему-то его отправляют, то это несоответствие стандартам..  Если тебе нужна кнопка в виде изображения, то сделай её простой ссылкой с onclick

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)