用于注册用户的php错误

时间:2011-09-09 23:23:26

标签: php mysql error-handling

我在基本的寄存器脚本中收到此错误:

Warning: mysql_result() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/func/user.func.php on line 23

给我错误的register.php部分是:

<?php

include('init.php'); // user.func.php is included in this file
include('template/header.php');
?>

<h3>Register</h3>

<?php

    // Typical $_POST stuff here, down the line the next line is where the error happenes.  Also, $register_email below is equal to $_POST['register_email'];

            if(user_exists($register_email)) { ***THIS FUNCTION IS WHERE THE PROBLEM IS.  THE ACTUAL FUNCTION IS DEFINED BELOW***
                $errors[] = 'That email has already been registered';
            }

来自user.func.php的函数给出了我的错误:

function user_exists($email) {
    $email = mysql_real_escape_string($email);
    $query = mysql_query("SELECT COUNT(user_id) FROM users WHERE email = '$email'");
    return (mysql_result($query, 0) == 1) ? true : false; // ***THIS LINE RIGHT HERE***
}

有关可能导致此错误的内容的任何想法。这是一个恼人的错误。这不是我第一次得到那个。

更新 谢谢你的答案,我已经尝试了每一个,我得到完全相同的错误。到目前为止,这是完整的register.php:

<?php

include('init.php');
include('template/header.php');
?>

<h3>Register</h3>

<?php

if(isset($_POST['register_email'], $_POST['register_name'], $_POST['register_password'])) {
    $register_email = $_POST['register_email'];
    $register_name = $_POST['register_name'];
    $register_password = $_POST['register_password'];

    $errors = array();

    if(empty($register_email) || empty($register_name) || empty($register_password)) {
        $errors[] = 'All fields required';
    } else {
        echo 'OK';
        }
        if(filter_var($register_email, FILTER_VALIDATE_EMAIL) == false) {
            $errors[] = 'Email address is not valid';
        }
        if(strlen($register_email) > 255 || strlen($register_name) > 35 || strlen($register_password) > 35) {
            $errors[] = 'Ayo, quit tampering with the html';
        }
        if(user_exists($register_email)) {
            $errors[] = 'That email has already been registered';
        }
}

if(!empty($errors)) {
    foreach($errors as $error) {
        echo $error.'<br />';
    }
} else {

    }

?>

5 个答案:

答案 0 :(得分:2)

现在,我必须首先说我不是mysql专家,我通常使用DB类(所以你应该这样做。)但是如果你说return (mysql_result($query, 0) == 1) ? true : false;行给你一个错误。这意味着上面的行不起作用。这意味着它没有返回资源。

你应该先调试你的功能..

function user_exists ($email) {
    $email = mysql_real_escape_string($email);
    if (!mysql_select_db("users")) {
        echo 'Could not select "users" DB.<br />Error: ' . mysql_error();
    }
    $query = mysql_query("SELECT COUNT(user_id) AS `count` FROM `users` WHERE `email` = '$email'");
    echo 'The count is currently: '$query['count'];
    // return (mysql_result($query, 0) == 1) ? true : false;
}

如果它说它无法选择用户数据库。然后问题在于你的联系。正如我所说,我不是专业人士。但你应该这样连接它:

$conn = mysql_connect('localhost', 'mysqluser', 'mypass');

现在你可以试试这个:

function user_exists ($email) {
    global $conn;
    $email = mysql_real_escape_string($email);
    if (!mysql_ping($conn)) {
        echo 'Could not ping the mysql. Connection is lost probably :(';
    }
    $query = mysql_query("SELECT COUNT(user_id) AS `count` FROM `users` WHERE `email` = '$email'", $conn);
    echo 'The count is currently: ' . mysql_result($query, 0);
    // return (mysql_result($query, 0) == 1) ? true : false;
}

如果代码已经过调试并且连接很棒!然后:

function user_exists ($email) {
    global $conn;
    if ($email) {
        $query = mysql_query("SELECT COUNT(user_id) AS `count` FROM `users` WHERE `email` = '$email'", $conn);
        if (mysql_result($query, 0)) {
            return true;
        }
    }  
    return false;
}

或者:

function user_exists ($email) {
    global $conn;
    if ($email) {
        $query = mysql_query("SELECT COUNT(user_id) AS `count` FROM `users` WHERE `email` = '$email'", $conn);
        if ($result = mysql_fetch_array($query)) {
            if ($result['count'] == 0) {
                return true;
            }
        }
    }  
    return false;
}

答案 1 :(得分:1)

更改为:

function user_exists($email) {
    $email = mysql_real_escape_string($email);
    $query = mysql_query("SELECT email FROM users WHERE email = '$email'");
    if (false === $query) return false;
    return (mysql_num_rows($query) == 1);
}

答案 2 :(得分:1)

如果您查看in the manualmysql_query()可以返回资源(这就是您所期望的) OR FALSE如果发生错误。

  

对于返回结果集的SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句,mysql_query()在成功时返回资源,如果出错则返回FALSE。   对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,mysql_query()成功时返回TRUE,错误时返回FALSE。

答案 3 :(得分:0)

使用

function user_exists($email) {

    if(isset($email){
    $email = mysql_real_escape_string($email);
    $query = mysql_query("SELECT COUNT(user_id) FROM users WHERE email = '$email'");
    $result = mysql_result($query,0);
    if($result ===false) {
    //error occur with the sql statement 
     //handel the error
    }
    else
    return ($result == 1) ? true : false; // ***THIS LINE RIGHT HERE***
}
}

答案 4 :(得分:0)

function user_exists($email) {
  $email = mysql_real_escape_string($email);
  $query = mysql_query("SELECT COUNT(user_id) FROM users WHERE email = '$email'");
  //return (mysql_result($query, 0) == 1) ? true : false; // ***THIS LINE RIGHT HERE***
  if( $query ) return ( mysql_result($query, 0) != "" ) ? true : false;
}