PHP mysql_num_rows () Возвращает ошибку - PullRequest
0 голосов
/ 12 октября 2011

У меня есть скрипт входа в PHP. Это та часть, где человек может создать нового пользователя. Моя проблема в том, что я хочу проверить, существует ли пользователь, и если имя пользователя не существует в таблице, чем создать нового пользователя. Однако, если пользователь существует, я хочу, чтобы он возвращал ошибку в переменной сеанса. Вот код, который у меня есть сейчас. Это не включает мои соединения с БД, но я знаю, что они работают. Это num_rows(), которое записывается как ошибка в файл error_log. Вот код:

$username = mysql_real_escape_string($username);
$query = "SELECT * FROM users WHERE username = '$username';";
$result = mysql_query($query,$conn);
if(mysql_num_rows($result)>0) //user exists
{
    header('Location: index.php');
    $_SESSION['reg_error']='User already exists';
    die();
}
else
{
$query = "INSERT INTO users ( username, password, salt )
        VALUES ( '$username' , '$hash' , '$salt' );";
mysql_query($query);
mysql_close();
header('Location: index.php');

Ошибка, которую он мне дает,

mysql_num_rows(): supplied argument is not a valid MySQL result resource in [dirctory name]

Ответы [ 3 ]

1 голос
/ 12 октября 2011

mysql_num_rows ()

Извлекает количество строк из набора результатов. Эта команда действительна только для операторов типа SELECT или SHOW, которые возвращают фактический набор результатов. Чтобы получить количество строк, затронутых запросом INSERT, UPDATE, REPLACE или DELETE, используйте mysql_affered_rows ().

Вместо того, чтобы делать SELECT * и затем mysql_num_rows (), вы можете сделать SELECT COUNT(*) и затем получить количество строк, выбирая поле (которое должно быть 0 или 1).SELECT COUNT всегда будет возвращать результат (при условии, что синтаксис запроса, конечно, правильный).

Кроме того, измените запрос:

$query = "SELECT * FROM users WHERE username = '$username';";

на

$query = "SELECT * FROM users WHERE username = '" 
    . mysql_real_escape_string($username)  . "';";
0 голосов
/ 12 октября 2011
 $username = mysql_real_escape_string($username);

Я думаю, вы должны заменить вышеприведенное на

$username = mysql_real_escape_string($_POST[$username]);
0 голосов
/ 12 октября 2011

Просто из любопытства, вы когда-нибудь слышали о припадках? И.Е., "вставить на дубликат ключа". Они будут вам полезны в этой ситуации, по крайней мере, если ваш столбец имени пользователя является уникальным ключом.

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

...