【问题标题】:mysql fetch assoc array empty errormysql 获取关联数组空错误
【发布时间】:2017-07-05 13:17:00
【问题描述】:

我想将获取的数组输出到前端。它工作正常,直到数组返回为空。它会引发一个 PHP 错误,即“未定义的变量 $data 在 php 行 X”。我一直在寻找解决方案,尽管它们并不完全符合我的想法。请帮忙。

public function search($search) {
    try {
        $query = $this->connection->prepare ( "SELECT * FROM files WHERE number=$search ORDER BY id" );
        $query->execute ();
        while ( $row = $query->fetch ( PDO::FETCH_ASSOC ) ) {
            $data [] = $row;
        }
        return $data;
    } catch ( PDOException $e ) {
        $e->getMessage ();
    }
}

【问题讨论】:

标签: php mysql pdo insert fetch


【解决方案1】:

您以错误的方式运行查询。

将变量添加到 PDO 查询中的唯一正确方法是通过参数添加它。了解仅在变量周围添加引号是不够的非常重要,并且最终会导致无数问题,从语法错误到 SQL 注入。另一方面,由于准备好的语句的本质,它是一种防弹解决方案,它不可能通过数据变量引入任何问题。

    $this->connection->prepare ( "SELECT * FROM files WHERE number=? ORDER BY id" );
    $query->execute ([$search]);

要消除错误,您应该使用appropriate fetch mode。所以完整的代码是

public function search($search) {
    $this->connection->prepare ( "SELECT * FROM files WHERE number=? ORDER BY id" );
    $query->execute ([$search]);
    return $query->fetchAll(PDO::FETCH_ASSOC);
}

请注意,您永远不应该捕获错误来报告它

【讨论】:

  • 感谢您的及时回复。确实,我会纠正这一点。但是,当找不到搜索的项目时,它仍然运行相同的错误。我该如何处理这个错误?
  • 我很感激。谢谢你。现在开始更正我的代码。
猜你喜欢
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2017-07-18
  • 2012-09-06
  • 2011-12-12
相关资源
最近更新 更多