未使用 mysqli bind_result 从数据库中获取值

Posted

技术标签:

【中文标题】未使用 mysqli bind_result 从数据库中获取值【英文标题】:Value is not getting fetched from database using mysqli bind_result 【发布时间】:2015-05-06 18:02:19 【问题描述】:

我正在尝试使用 mysqli 获取在我的数据库表中找到的int。然后我使用bind_result() 绑定结果。但是,当我尝试使用该值时,我只是得到一个 0。 我该如何处理?

我的代码如下所示:

$sql = <<<EOF
        SELECT
        project_salary_amount
        FROM projects_set_salary
        WHERE project_id = ? ORDER BY project_salary_id DESC LIMIT 1
EOF;
    $stmt = $mysqli->prepare($sql) or die ("Feil i database<br>" . $sql . "<br><b>Feilmelding:</b> " . $mysqli->error);
    $stmt->bind_param("i", $project_id);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($dbb_salary_amount);
    $db_salary_amount = $dbb_salary_amount;
    $num_salary_results = $stmt->num_rows;
    $stmt->free_result();
    $stmt->close();

    if($num_salary_results == 0)
        $sql = <<<EOF
        INSERT INTO
        projects_set_salary (project_id)
        VALUES ($project_id)
EOF;
        $stmt = $mysqli->prepare($sql) or die ("Feil i database<br>" . $sql . "<br><b>Feilmelding:</b> " . $mysqli->error);
        $stmt->execute();
        $stmt->close();
        $db_salary_amount = 10;
        $html_set_salary = "";
        $html_set_salary .= "<form id=\"form_send_salary\"method=\"post\" action=\"create_set_salary.php\">\n";
        $html_set_salary .= "<input type=\"number\" name=\"set_salary\" value=\"$db_salary_amount\">";
    
    else
        $html_set_salary = "";
        $html_set_salary .= "<form id=\"form_send_salary\"method=\"post\" action=\"create_set_salary.php\">\n";
        $html_set_salary .= "<input type=\"number\" name=\"set_salary\" value=\"$db_salary_amount\">";
    

现在,它不会在输入框中显示 10。这意味着它不执行 if 语句。但是,为什么我没有从$db_salary_amount 得到任何结果?我知道我可能不必将变量从$db_salary_amount 更改为$db_salary_amount。我只是想找出问题所在。

【问题讨论】:

我从未见过这样的 EOF (heredoc) 语句中的查询。 我接手了另一个程序员的工作,他是这样写的。所以我决定坚持他的写法,避免使用单独的方法。 @Sean 我在其他查询中都使用过。到目前为止还没有问题。 看起来你在完成 $stmt-&gt;bind_result($dbb_salary_amount); 之后再也不做 $stmt-&gt;fetch(); 了。来自php.net/manual/en/mysqli-stmt.bind-result.php -> When mysqli_stmt_fetch() is called to fetch data, the MySQL client/server protocol places the data for the bound columns into the specified variables 另外VALUES ($project_id) 应该是VALUES (?)。你应该在所有地方绑定。 【参考方案1】:

您在bind_result() 之后缺少-&gt;fetch()

$stmt->execute();
$stmt->store_result();
$stmt->bind_result($dbb_salary_amount);
$stmt->fetch(); // <--- missing this ->fetch()
$db_salary_amount = $dbb_salary_amount;

来自-&gt;bind_result() 的文档 -> When mysqli_stmt_fetch() is called to fetch data, the MySQL client/server protocol places the data for the bound columns into the specified variables var1, ....

【讨论】:

以上是关于未使用 mysqli bind_result 从数据库中获取值的主要内容,如果未能解决你的问题,请参考以下文章

bind_result 成数组 PHP mysqli 准备好的语句

PHP PHP准备语句 - 带有未定义的变量数传递给bind_result()

如何在 php 中使用 bind_result() 而不是 get_result()

数据未插入第二个表(MYSQLi)

PHP 致命错误:未捕获的错误:无法使用 mysqli 类型的对象作为数组

mysqli execute() 成功执行但未获取记录[重复]