Почему этот SQL-запрос вызывает предупреждения? [Дубликат]

0

Возможный дубликат:
mysql_num_rows(): предоставленный аргумент не является допустимым ресурсом результатов MySQL

            $resultnx = mysql_query("SELECT * FROM `emails` WHERE `email` = '{$email}'");
        $num_rows = mysql_num_rows($resultnx);

получает это предупреждение Предупреждение: mysql_num_rows(): предоставленный аргумент не является допустимым ресурсом результата MySQL в...

  • 0
    Я должен отметить, что предыдущий код помещает по крайней мере 1 экземпляр в базу данных. Это должно помочь мне проверить наличие дубликатов.
  • 0
    Этот код кажется уязвимым для внедрения SQL. Вместо этого используйте подготовленное утверждение.
Теги:

6 ответов

4

Похоже, что в вашем запросе есть некоторая ошибка, используйте die, чтобы узнать, какая ошибка:

 $query = "SELECT * FROM `emails` WHERE `email` = '{$email}'";
 $resultnx = mysql_query($query) or die(mysql_error());
 $num_rows = mysql_num_rows($resultnx);

Кроме того, убедитесь, что $email достигает штрафа:

var_dump($email);
  • 0
    Сервер MySQL ушел??
  • 0
    @ user355367: Это ошибка, которую вы получаете?
Показать ещё 5 комментариев
0

Ошибка, которую вы получаете напрямую

Сервер MySQL ушел

определенно вызван тем, что сервер MySql не работает. Если сервер MySql и PHP script находятся на одном и том же VPS, тогда вам нужно будет выследить, что именно заставляет базу данных закрываться (сбой). Проверьте журналы ошибок сервера. Они должны сказать вам, в чем проблема.


Вместо того, чтобы выполнять запрос так, как вы написали, почему бы вам просто не выполнить следующий запрос:

$query = "SELECT count(*) FROM `emails` WHERE `email` = '".$email."'";

Таким образом, вы можете просто вытащить количество строк, а не все данные, которые работают на MySql немного быстрее (особенно если индексируется email).

$query = "SELECT count(*) FROM `emails` WHERE `email` = '".$email."'";
$resultnx = mysql_query($query) or die(mysql_error());
$num_rows_array = mysql_fetch_array($resultnx);
$num_rows = $num_rows_array[0];

Строки в коде могут быть объединены. Они были разделены, чтобы было легче увидеть, что происходит.

0

Попробуйте выводить содержимое $query, а затем вставляя его в какой-либо инструмент выполнения запросов.

0

Это не отвечает на ваш вопрос напрямую, но есть, вероятно, лучшие способы проверки дубликатов. Подумайте о том, чтобы изменить поле электронной почты как уникальное. Из командной строки mySQL (или PHPMyAdmin) выполните следующие действия:

ALTER TABLE `emails` ADD UNIQUE(`email`);

Теперь, если вы попытаетесь вставить строку, в которой уже существует почта, она сама по себе сделает ошибку для вас.

0

Я думаю, вам нужно удалить фигурные скобки из $email.

$query = "SELECT * FROM `emails` WHERE email = '$email'";
$resultnx = mysql_query($query) or die(mysql_error());
$num_rows = mysql_num_rows($resultnx);
0

Или попробуйте

 $query = "SELECT * FROM `emails` WHERE `email` = '".$email."'";
 $resultnx = mysql_query($query) or die(mysql_error());
 $num_rows = mysql_num_rows($resultnx);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню