Php 如何执行2x$stmt->;执行()?I';我犯了一个错误
我得到一个错误(如此明显的错误) 对非对象调用成员函数bind_param() 我想检查用户在验证信息时是否提供了信息。如果没有,这是一个成功的回音,但如果是,那么我会得到那个错误。。。我的php代码:Php 如何执行2x$stmt->;执行()?I';我犯了一个错误,php,Php,我得到一个错误(如此明显的错误) 对非对象调用成员函数bind_param() 我想检查用户在验证信息时是否提供了信息。如果没有,这是一个成功的回音,但如果是,那么我会得到那个错误。。。我的php代码: <?php if(isset($_POST['configured'])){ // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn
<?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;
}
}
}
}
?>
您需要将会话\u start()
添加到页面顶部。您的绑定失败,因为没有$\u会话['username']
根据我的说法,您应该更换:
$stmt->bind_param('ss', $_POST['configured'], $_SESSION['username']);
$stmt->bind_param('s', $_POST['configured']);
$stmt->bind_param('s', $_SESSION['username']);
mysqli->prepare()返回FALSE,因此$stmt->bind_param()实际上类似于FALSE->bind_param(),FALSE不是一个对象,而是一个布尔值(在PHP中不是一个对象),因此错误消息调用非对象上的成员函数bind_param()
由于各种原因,mysqli->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中有一条(活动)语句,您试图在循环中“覆盖”该语句。
a) while($stmt->fetch())
的下一次迭代将做什么?
b) 这不适用于mysql;每个连接只有一条活动语句。请修复代码缩进,这样可以更容易地查找问题。缩进有什么问题?你的意思是结尾处有3个括号?从第一行开始,缩进不好,代码很难理解。谢谢。。但我不需要它:你必须在一个筒仓中工作,永远不要指望别人查看、维护或排除你的代码这不是完整的代码。。这只是代码的一部分…我的完整代码有300多行…所以你认为错误存在于你发布的行中?300多行代码是否以session_start()
开头?我知道它就在那里,因为我只有一个“确认我的信息”的代码,没有检查性别,它正在工作。。。在我加上性别检查后,它会弹出一个错误我认为这不可行。。bind_参数不能在分隔行中,也不能在2个代码中。。。相信我。。我试过一次,但没有成功:D它必须在一个代码中为什么@DDA?PHP允许在You is right@Jay Blanchard中使用多个元素,我刚刚发现这是可能的。但我在PHP手册中没有发现pdo的这种可能性,它只是针对mysqli吗?