2016-05-12 84 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