2016-05-12 99 views
-1

我知道還有很多其他人有這個問題,但我找不到解決方案。我以前有這個問題,我設法解決它:PHP - 準備語句bind_param()

$check = $conn->prepare("SELECT password,key,user FROM `users` WHERE email = ?"); 
$check->bind_param("s",$url_email); <-- line 31 
$check->execute(); 
mysqli_stmt_bind_result($check,$db_pass,$db_user_id,$db_username); 
$check->close(); 

但使用事先準備好的聲明時,我得到這個錯誤:

PHP Fatal error: Call to a member function bind_param() on a non-object in /var/www/html/login.php on line 31

+0

'key'被保留。 – chris85

+0

您的查詢也未選擇用戶標識「$ db_user_id」。 – chris85

回答

2

你很幸運。你所有的域名都是mysql中的keywords or reserved words

你應該逃避他們:

SELECT `password`, `key`, `user` FROM `users` WHERE email = ? 

嚴格說只有key是一個保留字,passworduser都沒有,但還是escape'em。

此外,感謝@ chris85,您正在混合OO和程序mysqli。取而代之的

mysqli_stmt_bind_result($check,$db_pass,$db_user_id,$db_username); 

使用

$check->bind_result($db_pass, $db_user_id, $db_username); 
+0

感謝您的提示,但我的問題仍未解決。在$ url_email上使用var_dump之後,它肯定是一個字符串, – hayhay

+0

雖然將OO與程序混合的風格很差,但它不應該導致AFAIK錯誤。 – Barmar