Php 如何使用mysqli获取查询结果?

Php 如何使用mysqli获取查询结果?,php,sql,Php,Sql,我在CodeIgniter中有这个查询: $user_data = $this->db ->select('table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, ' . 'table_roles.slug AS role_slug, table_user_settings.username, t

我在CodeIgniter中有这个查询:

$user_data = $this->db
            ->select('table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, '
                    . 'table_roles.slug AS role_slug, table_user_settings.username, table_users.id_roles, '
                    . 'table_users.first_name, table_users.last_name, table_users.mobile_number, table_users.phone_number, '
                    . 'table_users.address, table_users.city, table_users.state, table_users.zip_code, table_users.notes')
            ->from('table_users')
            ->where('table_users.data', 0)
            ->join('table_roles', 'table_roles.id = table_users.id_roles', 'inner')
            ->join('table_user_settings', 'table_user_settings.GUID = table_users.GUID')
            ->where('table_user_settings.username', $username)
            ->where('table_user_settings.password', $password)
            ->get()->row_array();

    return ($user_data) ? $user_data : NULL;
我已经为转换它编写了以下代码:

 if($stmt = $this->db->prepare("SELECT table_users.id AS user_id, table_users.email AS user_email, table_users.GUID as user_guid, "
        . "table_roles.slug AS role_slug, table_users.id_roles, table_users.first_name, "
        . "table_users.last_name, table_users.mobile_number, table_users.phone_number, "
        . "table_users.address, table_users.city, table_users.state, table_users.zip_code, table_users.notes "
        . "FROM table_users "
        . "INNER JOIN table_roles ON table_roles.id = table_users.id_roles "
        . "INNER JOIN table_user_settings ON table_user_settings.GUID = table_users.GUID "
        . "WHERE table_users.data = 0 AND "
        . "table_user_settings.username = ? AND "
        . "table_user_settings.password = ? "))
    {
        $stmt->bind_param("ss",$username, $password);
        $stmt->bind_result($id, $email, $GUID, $slug, $id_roles, $first_name, $last_name,
            $mobile_number, $phone_number, $address, $city, $state, $zip_code, $notes);
        $result = $stmt->execute();
        $stmt->fetch();
        var_dump($stmt);
    }

    $stmt->close();
    return $result;
但我不能将一个数组中的所有变量作为第一个代码返回。 在CodeIgniter中,我可以像->get()->row\u array()一样获得所有结果。但我不能在mysqli中执行同样的操作,我只想将查询的所有选定值作为数组返回。。。
有人能帮我做这个转换吗?

如果我理解正确,你想查询数组中的所有数据而不进行循环吗

如果数据太多,查询可能需要一段时间,但您可以尝试直接从数据库中获取mysqli\u,如下所示(示例):

另外:您需要PHP>=5.3.0 mysqli_result::fetch_all--mysqli_fetch_all-将所有结果行作为关联数组、数字数组或两者都提取

====

编辑: 上述方法避免了循环,但您需要自己转义这些值,如下所示:

$email = $mysqli->real_escape_string($email);
$GUID = $mysqli->real_escape_string($GUID);
要使用一个准备好的查询将所有内容都放到一个数组中,您必须使用一个循环:这是mysqli的一个限制,这就是为什么许多人更喜欢pdo。 因此,对于您的情况:

if (!$stmt->execute()) {
    // handle error
}

// Extract result set and rows
$getresult = $stmt->get_result();
while ($data = $getresult->fetch_assoc()) {
    $result[] = $data;
}

$stmt->close();
return $result;

// debug or testing
echo "<pre>";
var_dump($result);
echo "</pre>";
if(!$stmt->execute()){
//处理错误
}
//提取结果集和行
$getresult=$stmt->get_result();
而($data=$getresult->fetch_assoc()){
$result[]=$data;
}
$stmt->close();
返回$result;
//调试或测试
回声“;
var_dump($结果);
回声“;

如果我理解正确,您想在不执行循环的情况下查询数组中的所有内容吗

如果数据太多,查询可能需要一段时间,但您可以尝试直接从数据库中获取mysqli\u,如下所示(示例):

另外:您需要PHP>=5.3.0 mysqli_result::fetch_all--mysqli_fetch_all-将所有结果行作为关联数组、数字数组或两者都提取

====

编辑: 上述方法避免了循环,但您需要自己转义这些值,如下所示:

$email = $mysqli->real_escape_string($email);
$GUID = $mysqli->real_escape_string($GUID);
要使用一个准备好的查询将所有内容都放到一个数组中,您必须使用一个循环:这是mysqli的一个限制,这就是为什么许多人更喜欢pdo。 因此,对于您的情况:

if (!$stmt->execute()) {
    // handle error
}

// Extract result set and rows
$getresult = $stmt->get_result();
while ($data = $getresult->fetch_assoc()) {
    $result[] = $data;
}

$stmt->close();
return $result;

// debug or testing
echo "<pre>";
var_dump($result);
echo "</pre>";
if(!$stmt->execute()){
//处理错误
}
//提取结果集和行
$getresult=$stmt->get_result();
而($data=$getresult->fetch_assoc()){
$result[]=$data;
}
$stmt->close();
返回$result;
//调试或测试
回声“;
var_dump($结果);
回声“;

也许我误解了。。。。打开$stmt->fetch();到$stmt->fetchall();?使用$result->fetch_array()进行检查,但我想在一个数组中获得所有结果,而不需要执行一段时间循环,也可以使用$stmt->fetch();返回此错误:调用未定义的方法mysqli_stmt::fetchall(),可能我误解了。。。。打开$stmt->fetch();到$stmt->fetchall();?使用$result->fetch_array()进行检查,但我想在一个数组中获得所有结果,而不需要执行一段时间循环,也可以使用$stmt->fetch();返回此错误:调用未定义的方法mysqli_stmt::fetchall()可以,但我首先使用prepare,那么应该传递哪个参数而不是sql?也许是stmt?我用一个解决方案编辑了我的答案。如果它解决了您的问题,请接受它。好的,但我首先使用prepare,那么我应该传递哪个参数而不是sql?也许是stmt?我用一个解决方案编辑了我的答案。如果它解决了你的问题,请接受它。