[英]How to get query result with mysqli?
我在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_array()之類的數組獲得。 但是我不能在mysqli中做同樣的事情,我只想將查詢的所有選定值作為數組返回...有人可以幫助我進行此轉換嗎?
如果我理解正確,您是否想不循環就查詢所有數組?
如果數據過多,查詢可能需要一段時間,但是您可以直接從數據庫嘗試mysqli_fetch_all,如下所示(示例):
$sql = $mysqli->query("SELECT * FROM table WHERE status = '1'");
$results = mysqli_fetch_all($sql, MYSQLI_ASSOC); # all rows to array
另外:您需要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>";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.