Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql获取关联数组空错误_Php_Mysql_Pdo_Insert_Fetch - Fatal编程技术网

Php mysql获取关联数组空错误

Php mysql获取关联数组空错误,php,mysql,pdo,insert,fetch,Php,Mysql,Pdo,Insert,Fetch,我想将获取的数组输出到前端。它可以正常工作,直到数组返回为空。它抛出一个PHP错误,该错误为“未定义变量$data on PHP line X”。我一直在寻找解决方案,尽管它们并不完全符合我的想法。请帮忙 public function search($search) { try { $query = $this->connection->prepare ( "SELECT * FROM files WHERE number=$search ORDER BY

我想将获取的数组输出到前端。它可以正常工作,直到数组返回为空。它抛出一个PHP错误,该错误为“未定义变量$data on PHP line 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 ();
    }
}

您以错误的方式运行查询

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

    $this->connection->prepare ( "SELECT * FROM files WHERE number=? ORDER BY id" );
    $query->execute ([$search]);
为了消除错误,您应该使用。所以完整的代码是

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

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

谢谢您的及时回复。事实上,我会纠正这一点。但是,当未找到搜索项时,它仍在运行相同的错误。我该如何处理这个错误?我很感激。非常感谢。现在开始更正我的代码。您会发现
$data[]=$row
应该是
$data[]=$row
为什么要准备一个包含串联变量且没有参数的查询?您的脚本有可能会使用