2015-04-15 107 views
0

我正在創建一個登錄系統,但PHP打印錯誤導致無效的MySQL結果。 查詢是100%正確的,$ _POST有一個有效的數據。正確查詢MySQL無效結果

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ..../public_html/libs/basic.php on line 27 

這裏是PHP:

 if(isset($_POST['password']) && isset($_POST['login'])) 
     { 
      $login = mysql_real_escape_string($_POST['login']); 
      $result = mysql_query("SELECT * FROM `users` WHERE `login`='". $login ."' AND `pass`='". createPasswordHash($_POST['login'], $_POST['password']) ."' LIMIT 1");    
      if(mysql_num_rows($result) > 0) 
      { 
       $user_checked = 1; 
       $token = md5(uniqid() . "salt" . rand()); 
       setUserConfig('token', $token); 
       setUserConfig('token_time', time() + (60 * 60)); 
       return true; 
      } 
     } 

createPasswordHash:

function createPasswordHash($login, $pass) 
{ 
    return md5($login . "_". md5($pass)); 
} 

形式:

<form method="POST" action="?p=home"> 

Login: <input type="text" name="login" placeholder="Wpisz login..." /> 
Hasło: <input type="password" name="password" placeholder="Wpisz hasło..." /> 
    <input type="submit" value="Zaloguj" /> 
</form> 
+1

如果你這樣做,你會得到什麼:'var_dump($ result);'?那麼'echo mysql_error();'怎麼辦?你假設每一件事情都會完美運作。你需要*檢查錯誤*。每次發生錯誤時,都應確保它沒有發生。 –

+0

輸出:'bool(false)'這個查詢在phpMyAdmin中有效。 連接數據庫 - 在登錄代碼前 http://pastebin.com/YeZxqmaC – Maku123PL

+0

@ Maku123PL'bool(false)'表示您的查詢失敗。'mysql_query()'期望**兩個**參數是這樣的:'mysql_query(「your query」,$ connection);'其中'$ connection'是你的mysql連接的資源 –

回答

0

bool(false)意味着你的查詢失敗。

如果您的查詢是正確的,那麼該錯誤是在mysql_query()其中預計像參數,因此:

mysql_query("your query", $connection) OR die(mysql_error()); 

其中$connection是你的mysql連接的資源:

$connection = mysql_connect("host", "user", "password"); 

php.net

如果未指定鏈接標識符($connection),則假定由mysql_connect()打開的最後一個鏈接。如果沒有找到這樣的鏈接,它將嘗試創建一個,就好像調用了沒有參數的mysql_connect()一樣。如果未找到或建立連接,則會生成一個E_WARNING級別錯誤。

注:mysql_*功能已被棄用,使用mysqli_*PDO來代替。

0

我認爲你必須fetch[mysql_fetch_row][1](或東西等效)的結果是這樣的:

... 
$result = mysql_fetch_row ($result); 
if(mysql_num_rows($result) > 0) { 
    ... 
} 

你也可以試試這個,看看有什麼是你$result

print_r ($result); 

var_dump ($result); 

只是一個警告,mysql是depr ecated。推薦使用PDO