Почему появляется ошибка, если if (mysql_num_rows($result22)>0) {

12
P
На сайте с 06.01.2009
Offline
601
1000

Здравствуйте. Прошу подсказать.


$result22 = mysql_query("SELECT ...
if (mysql_num_rows($result22)>0) {...

так вот в логах ошибка

PHP Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in

Можете объяснить, почему?

Спасибо заранее.

[umka]
На сайте с 25.05.2008
Offline
456
#1

Синтаксическая ошибка в запросе

Лог в помощь!
P
На сайте с 06.01.2009
Offline
601
#2
'[umka:
;13636951']Синтаксическая ошибка в запросе

Нет, все таки не понял, где именно. Сперва подумал, скобку забыл закрыть...

Нашел, вероятно поэтому?

WHERE `id`>=$newid

надо

WHERE `id`>='$newid'

Эх, нет, все равно ошибка ((

[umka]
На сайте с 25.05.2008
Offline
456
#3

Выведите ошибку mysql-я, там в ней будет написано, в каком именно месте.

Или выполните тот же запрос в phpMyAdmin.

Или просто выведите этот же запрос, в большинстве случаев этого бывает достаточно, чтобы увидеть косяк.

P
На сайте с 06.01.2009
Offline
601
#4
'[umka:
;13636989']Выведите ошибку mysql-я, там в ней будет написано, в каком именно месте.
Или выполните тот же запрос в phpMyAdmin.
Или просто выведите этот же запрос, в большинстве случаев этого бывает достаточно, чтобы увидеть косяк.

А не подскажете, как выводить ошибку mysql-я в файл, а не на экран? У меня все ошибки пишутся в файл...

Понятно одно - проблему будет найти сложно, так как при запросе непосредственно в phpMyAdmin - все нормально. Видимо в каких то страницах, переменная учавствующая в запросе принимает какой то нехороший вид. У меня там происходит отбор товаров производителя, так вот запрос такого вида

$brand = 'название_бренда';
$result22 = mysql_query("SELECT id from `katalog` WHERE `brand`='$brand'");

возможно где то бренд вида Lami'Art правда как с этим бороться, тоже не знаю, т.к. надо найти его товары и просто так удалить из названия знак ' не могу же.

[umka]
На сайте с 25.05.2008
Offline
456
#5

Используйте функции экранирования при передаче переменных в запрос.

Иначе у вас однажды в базе может оказаться что-то совсем "нехорошее".

Чтобы ошибки mysql попадали в файл, их нужно перехватить и передать в обработчик ошибок, который пишет их в файл.

Всё зависит от вашей конкретной реализации.

siv1987
На сайте с 02.04.2009
Offline
427
#6

$res = mysql_query($query) or die(mysql_error());

$res = mysql_query($query);

if(!$res) die(mysql_error());

[umka]
На сайте с 25.05.2008
Offline
456
#7

Отвечаю на вопрос из лички.

Функция экранирования:

http://php.net/manual/ru/function.mysql-real-escape-string.php

(или аналоги MySQLi и PDO)

Если у вас предполагается числовая переменная, вместо экранирования можно просто принудительно преобразовать её в числовой тип:

$var+=0;

vandamme
На сайте с 30.11.2008
Offline
675
#8

в одинарных ковычках переменная?

$result22 = mysql_query("SELECT id from `katalog` WHERE `brand`='" . $brand . "'");

WEMASTER
На сайте с 16.08.2012
Offline
95
#9

Да перейдите уже на PDO и забудьте этот бред.

P
На сайте с 06.01.2009
Offline
601
#10
vandamme:
в одинарных ковычках переменная?
$result22 = mysql_query("SELECT id from `katalog` WHERE `brand`='" . $brand . "'");

Да. В одинарных.

Знаю глупость, но работает. У меня на входе, в обработчике стоит проверка на пробелы и кавычки.

$prov1 = substr_count($brand, "%20");

$prov2 = substr_count($brand, " ");

$prov3 = substr_count($brand, "'");

Для большей уверенности думаю ещё добавить

$brand = str_replace("=", "", $brand);

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий