如何从mysqli准备的查询结果中获取行对象数组 [英] How to get array of row objects from my result in mysqli prepared query

查看:194
本文介绍了如何从mysqli准备的查询结果中获取行对象数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将准备好的查询(mysqli)中的所有结果作为数组中的对象返回,但是我找不到fetchall方法或类似的方法.我该怎么办?

I would like to return all the results from my prepared query (mysqli) as objects in an array but i cant find a fetchall method or something similar. How do i go about this?

public function getImageResults ($search_term)
{
        if (empty($search_term))
            return false;

        $image_query = $this->db_connection->stmt_init();

        $image_query_sql =
        "
            SELECT 
                Images.url as url
            FROM 
                Images, ImageSearch, ImageSearchResults 
            WHERE 
                ImageSearch.search_string = ? AND
                ImageSearchResults.search_id = ImageSearch.id AND
                ImageSearchResults.image_id = Images.id AND

                Images.deleted = 0 AND
                ImageSearch.deleted = 0 AND
                ImageSearchResults.deleted = 0
        ";

        if ($image_query->prepare($image_query_sql))
        {
            $image_query->bind_param('s', $search_term);

            $image_query->execute();
            $image_query->store_result();
            $image_query->bind_result($url);

            return //need to return the entire result set here... any ideas?
        }

        return false;
}

我在网上找到了可以正常工作的代码,但使用时出现此错误

I found this code on the net which kinda works but i get this error when i use it

注意:使用未定义的常量 mysqli_stmt_bind_result-假定 'mysqli_stmt_bind_result'

Notice: Use of undefined constant mysqli_stmt_bind_result - assumed 'mysqli_stmt_bind_result'

private function getresult ($stmt)
    {
        $result = array();

        $metadata = $stmt->result_metadata();
        $fields = $metadata->fetch_fields();

        for (;;)
        {
            $pointers = array();
            $row = new stdClass();

            $pointers[] = $stmt;
            foreach ($fields as $field)
            {
                $fieldname = $field->name;
                $pointers[] = &$row->$fieldname;
            }

            call_user_func_array(mysqli_stmt_bind_result, $pointers);

            if (!$stmt->fetch())
                break;

            $result[] = $row;
        }

        $metadata->free();

        return $result;
    }

推荐答案

此行上的mysqli_stmt_bind_result:

call_user_func_array(mysqli_stmt_bind_result, $pointers);

应被引用:

call_user_func_array('mysqli_stmt_bind_result', $pointers);

您还可以使用 PDO ,这是未经测试的示例,但应该可以使用:

You could also use PDO, an untested example but it should work:

public function getImageResults ($search_term)
{
    $sql =
    "
        SELECT 
            Images.url as url
        FROM 
            Images, ImageSearch, ImageSearchResults 
        WHERE 
            ImageSearch.search_string = ? AND
            ImageSearchResults.search_id = ImageSearch.id AND
            ImageSearchResults.image_id = Images.id AND

            Images.deleted = 0 AND
            ImageSearch.deleted = 0 AND
            ImageSearchResults.deleted = 0
    ";
    $pdo = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'username', 'password');

    $sth = $pdo->prepare($sql);
    $sth->execute(array($search_term));

    $result = $sth->fetchAll(PDO::FETCH_CLASS, "ArrayObject");

    //var_dump($result);//debug

    return $result;
}

这篇关于如何从mysqli准备的查询结果中获取行对象数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆