Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何执行2x$stmt->;执行()?I';我犯了一个错误_Php - Fatal编程技术网

Php 如何执行2x$stmt->;执行()?I';我犯了一个错误

Php 如何执行2x$stmt->;执行()?I';我犯了一个错误,php,Php,我得到一个错误(如此明显的错误) 对非对象调用成员函数bind_param() 我想检查用户在验证信息时是否提供了信息。如果没有,这是一个成功的回音,但如果是,那么我会得到那个错误。。。我的php代码: <?php if(isset($_POST['configured'])){ // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn

我得到一个错误(如此明显的错误)

对非对象调用成员函数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;
            }
        }
    }
}
?>

您需要将
会话\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吗?