【问题标题】:PHP bind_param not binding parameter [duplicate]PHP bind_param没有绑定参数[重复]
【发布时间】:2017-11-01 21:16:10
【问题描述】:

我正在尝试使用 PHP 中的准备好的语句在表格中搜索特定项目。我没有收到任何错误,但也没有记录。这是我的代码:

$items = [];
$search = "john";
if ($stmt = $this->con->prepare("SELECT * FROM phptest WHERE search = ?")) { //'john'";
    $stmt->bind_param("s",$search);
    $stmt->execute();
    while ($row = mysqli_fetch_array($stmt)) {
        $item = [];
        $item['id'] = $row['id'];
        $item['first'] = $row['search'];
        $item['last'] = $row['data'];
        array_push($items, $item);
    }
}
return $items;

现在,当我不使用准备好的语句时,只使用SELECT * FROM phptest 我会得到表中的所有结果(包括 search = 'john' 的项目)。此外,如果我使用查询 SELECT * FROM phptest WHERE search = 'john' 我会得到一条记录,其中 search = 'john'

但是一旦我把它变成准备好的语句,我得到零错误但零记录。我确实收到警告:

mysqli_fetch_array() 期望参数 1 为 mysqli_result,给定布尔值

这让我觉得我的 bind_param 或 execute() 返回 FALSE,但是当我检查时,它似乎并没有返回 false。

我通过教程 https://www.simplifiedcoding.net/android-mysql-tutorial-to-perform-basic-crud-operation/ 开始了我的冒险之旅,我以为我完全理解了该教程,但在尝试制作自己的 PHP API 时遇到了错误。

然后我去了手册http://php.net/manual/fr/mysqli.prepare.php,但仍然找不到我的错误。

虽然它已被关闭为“离题”,但我已经查看了 PHP bind_param not working 并没有发现任何适用于我的情况。

同样,我在PHP bind_param not defined 和php bind_param is not working 中都没有发现错误。

【问题讨论】:

  • 我现在很困惑,因为您有面向对象的语句设置,然后您对 mysqli_fetch_array 使用过程样式...

标签: php prepared-statement bindparam


【解决方案1】:

你很亲密。 mysqli_fetch_array() 期望传递一个 result 对象,而不是语句对象本身:

$stmt = $conn->prepare(...);
$stmt->bind_param(...);
$stmt->execute();
$result = $stmt->get_result();
while ($row = mysqli_fetch_array($result)) {

或者,以完全面向对象的方式:

while ($row = $result->fetch_array()) {

【讨论】:

  • 是的,当他通过将$this->con->prepare 更改为$this->con->query 直接进行测试时......它会使$stmt 成为结果对象,而不是准备好的对象。
  • execute 返回布尔值,而不是 mysqli_result。
  • 这是mysqli吗?我以为是 PDO 哈哈……哦,嗯。那么好吧!
  • @Randall Heh 是的,我的大脑放屁。我在写 PDO 的想法,哦,这很容易,没有意识到自从我写 mysqli 以来它已经永远,我不记得它是如何工作的......
  • 谢谢你,亚历克斯。这正是我的问题所在……缺少的 $result = $stmt->get_result();我不怀疑我的混合面向对象和程序风格也产生了一个问题,这是因为我是 php 新手,并且已经查看了十几个不同的示例来尝试解决我的问题。我还可以建议,尽管答案可以在任何将此问题标记为重复的人提供的链接中找到,但该问题最初似乎与我的问题无关,解决方案也几乎不像 Alex 的评论那样清晰。
猜你喜欢
  • 2016-01-15
  • 2022-01-14
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多