【发布时间】: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();。