Возможный дубликат:
mysql_num_rows(): предоставленный аргумент не является допустимым ресурсом результатов MySQL
$resultnx = mysql_query("SELECT * FROM `emails` WHERE `email` = '{$email}'");
$num_rows = mysql_num_rows($resultnx);
получает это предупреждение Предупреждение: mysql_num_rows(): предоставленный аргумент не является допустимым ресурсом результата MySQL в...
Похоже, что в вашем запросе есть некоторая ошибка, используйте 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);
Ошибка, которую вы получаете напрямую
Сервер 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];
Строки в коде могут быть объединены. Они были разделены, чтобы было легче увидеть, что происходит.
Попробуйте выводить содержимое $query
, а затем вставляя его в какой-либо инструмент выполнения запросов.
Это не отвечает на ваш вопрос напрямую, но есть, вероятно, лучшие способы проверки дубликатов. Подумайте о том, чтобы изменить поле электронной почты как уникальное. Из командной строки mySQL (или PHPMyAdmin) выполните следующие действия:
ALTER TABLE `emails` ADD UNIQUE(`email`);
Теперь, если вы попытаетесь вставить строку, в которой уже существует почта, она сама по себе сделает ошибку для вас.
Я думаю, вам нужно удалить фигурные скобки из $email.
$query = "SELECT * FROM `emails` WHERE email = '$email'";
$resultnx = mysql_query($query) or die(mysql_error());
$num_rows = mysql_num_rows($resultnx);
Или попробуйте
$query = "SELECT * FROM `emails` WHERE `email` = '".$email."'";
$resultnx = mysql_query($query) or die(mysql_error());
$num_rows = mysql_num_rows($resultnx);