【问题标题】:Fatal error: Uncaught Error: Call to a member function execute() on bool in C Stack trace: #0 require() #1 {main} thrown in C on line 31致命错误:未捕获的错误:调用 C 中 bool 上的成员函数 execute() 堆栈跟踪:#0 require() #1 {main} 在第 31 行的 C 中抛出
【发布时间】:2021-09-16 17:19:21
【问题描述】:

我在上面得到这个错误,我的代码如下。我的代码有什么问题吗? tq。我不确定这是否与更改为不同版本的 PHP 有关。

<?php
    
    if (!isset($_SESSION['id']))
    {
        header("Location: error104.php");
        die();
    }
    $reclimit=3;
    if(isset($_GET['page'])){
    $page=$_GET['page'];}
    else
    {
    $page=1;
    }
    $start=(($page-1)*$reclimit);
    $advert = "SELECT * FROM useriklan AS ua INNER JOIN users AS u ON  ua.id=u.id
    WHERE u.id='".$id."'";
    $result=$conn->query($advert);
    $total=$result->num_rows;
    $tpages=ceil($total/$reclimit);
    //pagination script ends here
    $advert = "SELECT * FROM useriklan AS ua INNER JOIN users AS u ON  ua.id=u.id
    WHERE u.id='".$id."' ORDER BY dateua DESC LIMIT $start,$reclimit";
    //$statement = $conn->query($advert);
    $statement = $conn->prepare($advert);
    $statement->execute();
    $result = $statement->get_result(); 
    ?>

【问题讨论】:

  • 在您的一个 sql 字符串中,该表名为 useriklan,另一个名为 useraiklan。其中一个是错的吗?
  • 哦,好的。我已经改变了它,但我仍然得到同样的错误。顺便谢谢你注意到它。两者现在都是 useriklan。
  • 尝试var_dumping $statement 的值。如果准备语句不起作用,则该值将设置为 false(因此为布尔值)php.net/manual/en/mysqli.prepare.php
  • 这能回答你的问题吗? Call to a member function execute() on boolean in

标签: php


【解决方案1】:

您的代码中有很多内容需要解压,尤其是涉及到安全性、参数等方面。

调试

首先,当您使用mysqli 并且正在调试时,您应该在文件顶部添加如下错误标志。

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

这将为您提供有用的信息,以了解您的陈述有什么问题。

准备好的陈述

准备好的语句(您在查询中使用的prepare 方法)的美妙之处在于它们会以安全的方式添加您的参数,保护您免受sql 注入等影响。

所以你应该使用bind_param 来添加你的变量(例如$id)。例如在您的第一个查询中

$advert = "SELECT * FROM useriklan AS ua INNER JOIN users AS u ON  ua.id=u.id
    WHERE u.id= ?";
$statement = $conn->prepare($advert);
$statement->bind_param('s', $id);

如果$id 是一个数字(integer),您可以更严格地使用i' 类型而不是s,如下所示。

$statement->bind_param('i', $id);

你可以在第二个查询中做同样的事情

$advert = "SELECT * FROM useriklan AS ua INNER JOIN users AS u ON  ua.id=u.id WHERE u.id= ? ORDER BY dateua DESC LIMIT ?,?";
$statement = $conn->prepare($advert);
$statement->bind_param('iii', $id, $start, $reclimit);

缺少$id 定义

在您的代码中找不到变量$id。我假设你的意思是 $_SESSION['id'] 所以你可以做类似的事情

$id = $_SESSION['id']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 2021-04-18
    • 2020-02-15
    • 2022-07-02
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多