
本文旨在解决 codeigniter 3 在使用 sqlsrv 驱动连接 sql server 数据库时,查询结果无法直接获取数据的问题。核心在于理解 codeigniter 的 query() 方法返回的是一个数据库结果对象,而非原始数据数组。教程将详细介绍如何通过调用 result_array() 等方法从结果对象中正确提取数据,并提供示例代码,确保开发者能够顺利获取并处理查询结果。
在使用 CodeIgniter 3 进行数据库操作时,无论是通过查询构造器(Query Builder)还是直接执行 SQL 语句,例如 $this-youjiankuohaophpcndb->query($sql),其返回的并不是直接的数据数组,而是一个数据库结果对象(Database Result Object)。这个对象封装了查询执行的状态以及获取结果的各种方法。
当您在模型中执行类似如下代码时:
$sql = "SELECT * FROM aplikasi"; $data = $this->db->query($sql); var_dump($data); // 此时 $data 是一个对象,而不是期望的数据数组
var_dump($data) 的输出将是一个 CI_DB_sqlsrv_result 类型的对象,而不是您期望的行数据数组。这是 CodeIgniter 框架的正常行为,它提供了一系列方法来从这个结果对象中提取数据。直接对结果对象进行 var_dump 或尝试将其作为数组使用,将无法获得实际的数据库记录。
要从数据库结果对象中获取实际的数据,您需要调用该对象提供的方法。CodeIgniter 提供了多种方法来满足不同的数据获取需求:
针对本例中需要获取多行数据的情况,最常用的方法是 result_array()。
以下是修正后的 CodeIgniter 模型代码,展示了如何正确地从 sqlsrv 查询结果中提取数据。
原始模型代码(存在问题):
class Mod_login extends CI_Model{
function Aplikasi(){
$sql = "SELECT * FROM aplikasi";
$data = $this->db->query($sql);
var_dump($data); // 问题所在:直接 var_dump 结果对象
die();
if (!$data) { // 此处判断 $data 是否为 false 并不准确,因为 $data 始终是对象(除非查询失败)
return false;
} else {
return $data;
};
}
}修正后的模型代码:
class Mod_login extends CI_Model{
function Aplikasi(){
$sql = "SELECT * FROM aplikasi";
$query_result = $this->db->query($sql); // 执行查询,返回结果对象或 FALSE
// 重要的错误处理:检查查询是否成功执行
if ($query_result === FALSE) {
// 查询执行失败,例如SQL语法错误、表不存在等
log_message('error', 'Database query failed: ' . $this->db->error()['message']);
return []; // 返回空数组或根据业务逻辑返回 false
}
// 查询成功,从结果对象中获取数据
$data = $query_result->result_array(); // 获取所有结果行作为关联数组数组
// 调试时可以取消注释以下两行,查看实际获取的数据
// var_dump($data);
// die();
// 返回处理后的数据
return $data;
}
}在控制器中调用此模型方法时,您将直接获得一个包含数据的数组,可以直接用于视图层:
public function index()
{
$logged_in = $this->session->userdata('logged_in');
if ($logged_in == TRUE) {
redirect('dashboard');
} else {
// $aplikasi['aplikasi'] 现在将是一个包含数据库记录的数组
$aplikasi['aplikasi'] = $this->Mod_login->Aplikasi();
$this->load->view('admin/login_data', $aplikasi);
}
}$this->db->select('*');
$this->db->from('aplikasi');
// 如果有 WHERE 条件,可以使用 $this->db->where('column', $value);
$query_result = $this->db->get(); // get() 方法返回结果对象
$data = $query_result->result_array();在 CodeIgniter 3 中使用 sqlsrv 驱动进行数据库查询时,关键在于理解 $this->db->query() 返回的是一个数据库结果对象。要获取实际的数据,必须调用该结果对象上的方法,如 result_array() 或 result()。通过正确地处理这个结果对象,并结合适当的错误处理和安全实践,开发者可以有效地获取并利用 SQL Server 返回的数据,从而构建稳定可靠的应用程序。遵循上述指南和最佳实践,将有助于避免常见的数据库数据获取问题,并提升代码的健壮性和可维护性。
以上就是CodeIgniter 3 SQLSRV 数据库查询结果处理指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号