2011-09-09 85 views
0

即时得到这个错误在一个基本的寄存器脚本:用于注册用户PHP错误

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*** 
} 

任何想法可能会导致此错误。这是一个令人讨厌的错误。这不是我第一次得到那个。

UPDATE 感谢您的答案,我试过每一个,我得到了完全相同的错误。下面是完整的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 { 

    } 

?> 
+0

大概的mysql_query返回false,后续代码var_dump的$ query变量 – galchen

+0

检查$电子邮件的值,如果其设置与否 使用该 如果(isset($电子邮件))在做出选择语句之前 – confucius

+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; 
} 
+0

你必须检查每一步。否则,你可能会遇到最愚蠢的错误,并以指数形式过度复杂化。你的禅宗喜欢的方法是正确的。我放弃了所有的代码,并从头开始,一路上都进行了错误检查。我必须有更严格的错误处理和更频繁的检查,所以我不写200行代码,第5行是搞砸了。 – Graham

+0

很酷,还有一些建议:1)对mysql类进行一些快速研究,找到你喜欢的并且开始使用它 - 调试更容易,代码更少,整洁。 2)我最近在[程序员]上有错误报告主题(http://programmers.stackexchange.com/questions/104818/how-important-are-php-notices-really)。肯定检查出来,所以你不会因为所有这些通知而过度编码。未定义的数组可能产生了一个通知权?但从技术上讲,这是正确的和功能性的。 //无论如何,祝你的项目顺利:) –

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); 
} 
+0

我不确定这会修复它,如果错误是陈述了一个布尔值被传递给mysql_result它将表明查询失败 – Clive

+0

这没有奏效。我也试着让这个回报成为turnery操作员,结果也是一样。两人都有同样的错误。 – Graham

+0

答案更新了! – tttony

1

如果你看看in the manualmysql_query()可以返回的ressource(这是你所期望的)ORFALSE如果发生一个错误。

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

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*** 
} 
} 
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; 
}