2011-09-09 86 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; 
}