【问题标题】:Uncaught Error: Call to undefined method mysqli_result::fetchAll()未捕获的错误:调用未定义的方法 mysqli_result::fetchAll()
【发布时间】:2021-05-05 11:00:24
【问题描述】:

当我尝试从表单发送要放入查询中的数据时,它给了我这样的消息:

您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 ':Citta' 附近使用的正确语法

这是给我错误的代码部分:

    $location = $_POST['Citta'];
    $sql = "SELECT * FROM test.cliente WHERE test.cliente.Citta = :Citta";

    $statement = $conn->prepare($sql);
    $statement->bindParam(':Citta', $location, PDO::PARAM_STR);
    $statement->execute();

    $result = $statement->fetchAll();

我从另一个页面的表单中获取输入,然后数据转到 $location。

我已经全部改成这样了:

    $location = $_POST['Citta'];
    $sql = "SELECT * FROM lgp.cliente WHERE lgp.cliente.Citta = ?";
    $statement = $conn->prepare($sql);
    $statement->bind_param("s", $location);
    $statement->execute();
    $result = $statement->fetchAll();

但是现在,它给了我这个错误:

致命错误:未捕获的错误:在 bool 上调用成员函数 execute()

我已经添加了 mysqli 报告。 我已将$result = $statement->fetchAll(); 更改为$result = $statement->get_result()->fetchAll();

现在错误是:

致命错误:未捕获错误:调用未定义方法 mysqli_result::fetchAll()

【问题讨论】:

  • mysli 和 PDO 是不同的 api,请检查您使用的是哪一个,因为它们具有不同的功能。
  • 看起来您正在使用 mysqli 库,但尝试使用 PDO 语法。除了都有名为 prepare() 的函数之外,这两个库在语法方面没有很多共同点。 phpdelusions.net/mysqli 有一些在 Mysqli 中使用准备好的语句的简单示例。您还可以查看 PHP/mysqli 文档以了解更多信息。 php.net/manual/en/mysqli.quickstart.prepared-statements.php
  • 提示:mysqli不支持命名参数,参数与bind_param函数绑定(注意拼写,所有参数都绑定在一个函数调用中,不单独绑定)。同样,文档/教程可以向您展示这一切。
  • $location = $_POST['Citta']; $sql = "SELECT * FROM test.cliente WHERE test.cliente.Citta = $location"; $语句->执行();但是,为什么如果我将所有内容缩减到此,它仍然告诉我它没有找到“Milano”列(这是进入 $location 的表单中的输入)?
  • $sql = "SELECT * FROM test.cliente WHERE test.cliente.Citta = $location" 如果您使用准备好的语句,这是错误的。应该是$sql = "SELECT * FROM test.cliente WHERE test.cliente.Citta = ?",然后是$statement = $conn->prepare($sql); $statement->bind_param("s", $location); $statement->execute();

标签: php mysqli pdo


【解决方案1】:

您似乎对 mysqliPDO 语法感到困惑。有一些相似之处,但主要是使用方式不同。

您在mysqli 中正确重写的代码如下所示:

$location = $_POST['Citta'];
$sql = "SELECT * FROM test.cliente WHERE test.cliente.Citta = ?";
$statement = $conn->prepare($sql);
$statement->bind_param("s", $location);
$statement->execute();
$result = $statement->get_result()->fetch_all();

有关更多示例,请参阅 https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.phphttps://phpdelusions.net/mysqli

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    相关资源
    最近更新 更多