我收到错误(明显的错误)
在非对象上调用成员函数bind_param()...
我想在验证他的信息时检查用户是否提供了他的信息。如果不是,它是一个成功的回声,但如果是,那么我得到那个错误...我的PHP代码:
<?php
if(isset($_POST['configured'])){
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$username = $_SESSION['username'];
$stmt = $mysqli->prepare("SELECT gender FROM members WHERE username = ?");
$stmt->bind_param('s', $username);
$stmt->bind_result($gender);
$stmt->execute();
while ($stmt->fetch()){
if(empty($gender)){
echo "<font color='#DB4D4D'>Verification failed! Please provide your information and try again...</font>";
} else {
$_POST['configured'] = 1;
$sql = "
UPDATE members
SET configured = ?
WHERE username = ?
";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('ss', $_POST['configured'], $_SESSION['username']); // This is the error line
$ok = $stmt->execute();
if ($ok == TRUE) {
echo "<p><font color='#00CC00'>Your information has been verified.</font><p>
<form action='index.php'> <input type='submit' class='buttondiv' value='Continue to Home Page'>";
} else {
echo "Error: " .$stmt->error;
}
}
}
}
?>
哪里有问题?
BTW:错误行本身并不正确..还有其他事情要发生......
答案 0 :(得分:1)
您需要将session_start()
添加到页面顶部。您的绑定失败,因为没有$_SESSION['username']
答案 1 :(得分:0)
mysqli-&gt; prepare()返回FALSE因此$ stmt-&gt; bind_param()实际上类似于FALSE-&gt; bind_param(),FALSE不是对象而是布尔值(不是PHP中的对象)因此错误消息Call to a member function bind_param() on a non-object
mysqli-&gt; prepare()失败总是出于各种原因的选择 因此总是检查返回值。
$stmt = mysqli_prepare(...);
if ( !$stmt ) {
trigger_error( __LINE__ . ': '.print_r($mysqli->error_list, true), E_USER_ERROR );
}
与大多数其他mysqli函数/方法相同,bind_param(),execute()...总是检查返回值。如果它为FALSE或NULL,则出现问题 简而言之:添加错误处理!
让我们稍微压缩你的脚本:
$stmt->execute();
while ($stmt->fetch()){
...
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('ss', $_POST['configured'], $_SESSION['username']);
$ok = $stmt->execute();
您在$ stmt中有一个(有效)语句,您尝试&#34;覆盖&#34;在循环内。
a)while ($stmt->fetch())
的下一次迭代会做什么?
b)不能与mysql一起使用;每个连接只有一个活动语句。
答案 2 :(得分:-1)
根据我的说法你应该替换:
$stmt->bind_param('ss', $_POST['configured'], $_SESSION['username']);
$stmt->bind_param('s', $_POST['configured']);
$stmt->bind_param('s', $_SESSION['username']);