Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
CodeIgniter 3 (CI3) 结合 SQLSRV 数据库获取数据教程_创想鸟

CodeIgniter 3 (CI3) 结合 SQLSRV 数据库获取数据教程

CodeIgniter 3 (CI3) 结合 SQLSRV 数据库获取数据教程

本教程旨在解决 codeigniter 3 框架中通过 sqlsrv 驱动连接 sql server 数据库时,无法直接获取查询结果数据的问题。我们将详细介绍 codeigniter 数据库抽象层的特性,阐明 `query()` 方法返回的是结果对象而非直接数据数组,并提供正确的模型层代码示例,指导开发者如何利用 `result_array()` 等方法从结果对象中高效提取并处理数据库查询数据。

在使用 CodeIgniter 3 (CI3) 框架连接 SQL Server 数据库时,开发者常常会遇到一个常见问题:执行 query() 方法后,直接 var_dump() 返回的并非预期的数组数据,而是一个数据库结果对象。这导致新手开发者难以获取并使用实际的查询结果。本文将深入探讨这一现象,并提供在 CI3 中正确配置 SQLSRV 驱动、执行查询并提取数据的方法。

1. CodeIgniter 3 数据库配置

首先,确保您的 CodeIgniter 3 应用程序已正确配置 SQLSRV 数据库驱动。在 application/config/database.php 文件中,您需要设置相应的数据库连接参数。以下是一个典型的 SQLSRV 配置示例:

 '',    'hostname' => '10.***.***.*', // 替换为您的 SQL Server 主机名或 IP 地址    'username' => 'username',     // 替换为您的数据库用户名    'password' => 'password',     // 替换为您的数据库密码    'database' => 'mydb',         // 替换为您的数据库名称    'dbdriver' => 'sqlsrv',       // 关键:指定为 sqlsrv 驱动    'dbprefix' => '',    'pconnect' => FALSE,    'db_debug' => (ENVIRONMENT !== 'production'), // 建议在开发环境开启调试    'cache_on' => FALSE,    'cachedir' => '',    'char_set' => 'utf8',         // 字符集设置    'dbcollat' => 'utf8_general_ci', // 字符排序规则    'swap_pre' => '',    'encrypt'  => FALSE,    'compress' => FALSE,    'stricton' => FALSE,    'failover' => array(),    'save_queries' => TRUE // 确保在需要调试时查询被保存);

配置要点:

dbdriver:必须设置为 sqlsrv。hostname:SQL Server 的 IP 地址或主机名。username 和 password:用于连接数据库的凭据。database:要连接的数据库名称。db_debug:在开发环境中设置为 TRUE 有助于发现连接或查询错误。char_set 和 dbcollat:根据您的数据库和应用程序需求进行设置,确保字符编码兼容性。

2. 模型层:执行查询与正确获取数据

在 CodeIgniter 中,数据库操作通常在模型(Model)层进行。当您使用 $this->db->query() 方法执行 SQL 查询时,CodeIgniter 的数据库抽象层会返回一个数据库结果对象(例如 CI_DB_sqlsrv_result 对象),而不是直接的数据数组。要获取实际的查询结果数据,您需要调用该结果对象上的特定方法。

以下是修正后的模型层代码示例:

load->database();     }    /**     * 获取应用列表数据     * @return array|false 返回应用数据数组,如果查询失败则返回 false     */    public function Aplikasi() {        $sql = "SELECT * FROM aplikasi";        $query = $this->db->query($sql);        // 调试:var_dump($query); 会显示一个结果对象        // 要获取实际数据,需要调用结果对象的方法        // 检查查询是否成功,并且是否有结果        if ($query && $query->num_rows() > 0) {            // 获取所有结果行作为关联数组的数组            // $data = $query->result_array();             // 调试:输出结果数组            // var_dump($data);            // die(); // 调试完成后移除此行            return $query->result_array();        } else {            // 如果查询失败或没有结果            return false;        }    }}

关键修正点:

$query = $this->db->query($sql);:此行返回的是一个数据库结果对象。$query->result_array():这是从结果对象中提取所有结果行并以关联数组形式返回的关键方法。result_array():返回一个包含所有结果行的关联数组。result():返回一个包含所有结果行的对象数组。row_array():返回单个结果行作为关联数组。row():返回单个结果行作为对象。$query->num_rows():用于获取查询返回的行数,可以用来判断是否有结果。

3. 控制器层:调用模型并传递数据

控制器负责调用模型方法,获取数据,并将其传递给视图。

load->model('Mod_login'); // 加载模型        $this->load->library('session'); // 加载 session 库    }    public function index() {        $logged_in = $this->session->userdata('logged_in');        if ($logged_in == TRUE) {            redirect('dashboard'); // 如果已登录,重定向到仪表盘        } else {            // 调用模型方法获取应用数据            $aplikasi_data = $this->Mod_login->Aplikasi();             // 将数据传递给视图            $data['aplikasi'] = $aplikasi_data;             $this->load->view('admin/login_data', $data);        }    }}

4. 视图层:展示查询结果

在视图文件中,您可以遍历传递过来的数据数组并展示内容。

    应用列表    

可用应用

  • ID: , 名称:

没有找到任何应用数据。

5. 注意事项与最佳实践

PHP SQLSRV 扩展安装:确保您的 PHP 环境已正确安装并配置了适用于当前 PHP 版本的 SQLSRV 扩展。这是连接 SQL Server 的前提。您可以查看 phpinfo() 输出,确认 sqlsrv 模块已加载。错误处理:在模型中,$this->db->query() 如果执行失败(例如 SQL 语法错误),会返回 FALSE。因此,检查 $query 是否为 FALSE 是必要的。如果需要获取数据库的具体错误信息,可以使用 $this->db->error() 方法。在生产环境中,应避免直接输出错误信息,而是记录到日志文件。CodeIgniter Active Record:对于更复杂的查询或为了提高代码的可读性和安全性,强烈建议使用 CodeIgniter 的 Active Record 类。它提供了一种更面向对象的方式来构建查询,并自动处理 SQL 注入防护。

// 使用 Active Record 获取数据public function AplikasiActiveRecord() {    $query = $this->db->get('aplikasi'); // 相当于 SELECT * FROM aplikasi    if ($query->num_rows() > 0) {        return $query->result_array();    }    return false;}

调试技巧:使用 var_dump() 配合 die() 在关键点检查变量内容。开启 db_debug 可以让 CodeIgniter 在发生数据库错误时显示详细信息。检查 PHP 错误日志和 CodeIgniter 的日志文件 (application/logs/)。

总结

在 CodeIgniter 3 中使用 SQLSRV 驱动连接 SQL Server 并获取查询结果的核心在于理解 $this->db->query() 方法返回的是一个数据库结果对象。要获取实际的数据数组,您必须调用该结果对象上的方法,如 result_array()、result()、row_array() 或 row()。遵循本教程中的配置和代码实践,将帮助您有效地在 CI3 应用程序中处理 SQL Server 数据库交互。同时,利用 Active Record 和完善的错误处理机制,可以进一步提升代码的健壮性和可维护性。

以上就是CodeIgniter 3 (CI3) 结合 SQLSRV 数据库获取数据教程的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1341226.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Doctrine ORM 高效查询:利用关联实体字段数组(IN 子句)筛选数据
上一篇 2025年12月13日 04:32:29
OpenCart多店铺管理:高效同步更新与集中化部署实践
下一篇 2025年12月13日 04:32:38

相关推荐

  • 可能是目前效果最好的开源生图模型,混元生图 3.0 来了

    可能是目前效果最好的开源生图模型,混元生图 3.0 来了可能是目前效果最好的开源生图模型,混元生图 3.0 来了可能是目前效果最好的开源生图模型,混元生图 3.0 来了可能是目前效果最好的开源生图模型,混元生图 3.0 来了

    腾讯混元最新发布并开源原生多模态生图模型——混元图像 3.0(hunyuanimage 3.0)! 模型参数规模高达 80B,是目前参数量最大的开源生图模型。 同时,HunyuanImage 3.0 将理解与生成一体化融合,也是首个开源工业级原生多模态生图模型,效果对标业界头部闭源模型,堪称目前开源…

    2026年9月26日 • 用户投稿
    400
  • 一键PHP环境可以同时跑多个PHP版本吗_多版本共存实现

    多PHP版本共存可行。通过宝塔、phpStudy等集成环境或手动配置Nginx+多PHP-FPM,可实现不同站点使用不同PHP版本,需注意扩展兼容性、端口冲突及安全维护。 一键PHP环境通常指的是集成化的开发环境工具,比如 XAMPP、WAMP、宝塔面板 或 phpStudy 这类软件。这类工具默认…

    2026年9月26日
    000
  • Google浏览器官网入口一键直达

    Google浏览器官网入口一键直达Google浏览器官网入口一键直达Google浏览器官网入口一键直达Google浏览器官网入口一键直达

    Google浏览器官网入口一键直达地址是https://www.google.cn/chrome/,该网址提供简洁界面、多标签管理、智能搜索、网页翻译等功能,并支持跨设备同步书签、历史记录和密码,具备高效性能与安全更新。 Google浏览器官网入口一键直达在哪里?这是不少网友都关注的,接下来由PHP…

    2026年9月26日 • 用户投稿
    000
  • Win7系统如何让壁纸变换淡入淡出

    Win7系统如何让壁纸变换淡入淡出Win7系统如何让壁纸变换淡入淡出Win7系统如何让壁纸变换淡入淡出Win7系统如何让壁纸变换淡入淡出

    在windows 7操作系统里,除了常规方式更换桌面背景之外,还有一种更为高级的切换模式——即淡入淡出效果。接下来,win10系统之家的小编将为您详细讲解具体的操作步骤。 首先,准备好您想要用于淡入淡出效果的桌面背景图片,并调整更换时间间隔为10秒(当然,您可以依据需要自行调整此参数),如下图所示:…

    2026年9月26日 • 用户投稿
    000
  • 抖音内容怎么吸引流量_抖音内容吸引流量的核心方法

    抖音内容怎么吸引流量_抖音内容吸引流量的核心方法抖音内容怎么吸引流量_抖音内容吸引流量的核心方法抖音内容怎么吸引流量_抖音内容吸引流量的核心方法抖音内容怎么吸引流量_抖音内容吸引流量的核心方法

    答案:提升抖音推荐需优化开头3秒、内容结构、互动率、AI工具和垂直领域。打造强钩子如结果前置、冲突制造、高悬念提问;采用痛点—解决—升华结构,每30秒设信息点;引导评论、挑战和点赞;用AI生成素材与分析数据;明确账号定位并连续发布同领域内容10条以上,前3-5天模拟用户行为助系统打标。 如果您发布的…

    2026年9月26日 • 用户投稿
    400
  • AI辩论教练:用豆包AI+Character模拟对手训练逻辑反应

    AI辩论教练:用豆包AI+Character模拟对手训练逻辑反应AI辩论教练:用豆包AI+Character模拟对手训练逻辑反应AI辩论教练:用豆包AI+Character模拟对手训练逻辑反应AI辩论教练:用豆包AI+Character模拟对手训练逻辑反应

    你可以使用豆包ai和character.ai进行辩论训练,具体步骤包括:1.选择合适的平台,豆包ai适合快速访问,character.ai适合丰富角色设定;2.创建或选择辩论角色并设定背景、立场和风格;3.明确辩题并输入给ai;4.轮流发言并及时记录分析;5.利用豆包ai进行观点碰撞、论据挖掘和模拟…

    2026年9月26日 • 用户投稿
    000
  • Java项目质量保障体系:静态分析、单元测试与集成测试

    Java项目质量保障体系:静态分析、单元测试与集成测试Java项目质量保障体系:静态分析、单元测试与集成测试Java项目质量保障体系:静态分析、单元测试与集成测试Java项目质量保障体系:静态分析、单元测试与集成测试

    静态分析是Java质量保障的第一道防线,因其能在代码运行前发现潜在缺陷。SonarQube等工具通过集成Checkstyle、PMD等规则集,实现代码规范、安全、性能的全面扫描,及早暴露空指针、资源泄漏等问题,减少技术债。它作为“预检系统”,避免低级错误流入后续阶段,提升整体代码整洁度,为单元与集成…

    2026年9月26日 • 用户投稿
    000
  • 如何解决MySQL版本兼容性问题的处理方法?

    如何解决MySQL版本兼容性问题的处理方法?如何解决MySQL版本兼容性问题的处理方法?如何解决MySQL版本兼容性问题的处理方法?如何解决MySQL版本兼容性问题的处理方法?

    mysql版本兼容性问题可通过升级、降级或编写兼容代码解决。具体步骤为:1.明确问题根源,如sql语法、函数或协议不兼容;2.选择升级或降级版本,优先考虑升级以获取优化和修复;3.使用注释语法编写兼容性sql;4.借助orm框架屏蔽底层差异;5.通过查询版本号或配置文件实现条件判断;6.利用dock…

    2026年9月26日 • 用户投稿
    100
  • 自媒体内容怎么避免同质化_避免自媒体内容同质化的实用方法

    自媒体内容怎么避免同质化_避免自媒体内容同质化的实用方法自媒体内容怎么避免同质化_避免自媒体内容同质化的实用方法自媒体内容怎么避免同质化_避免自媒体内容同质化的实用方法自媒体内容怎么避免同质化_避免自媒体内容同质化的实用方法

    内容同质化指不同来源的信息高度相似,缺乏独特性。其表现为内容重复、视角单一、模板化创作等;核心原因包括平台算法驱动形成“信息茧房”、原创成本高导致复制泛滥、创作者创新能力不足;这会降低用户信息筛选效率,阻碍多元思考,并削弱社会创新动力;解决方向需优化算法以增加多样性权重、加强原创保护机制,并提升用户…

    2026年9月26日 • 用户投稿
    000
  • 豌豆素质如何退费

    豌豆素质如何退费豌豆素质如何退费豌豆素质如何退费豌豆素质如何退费

    在选择教育课程时,退费问题一直是大家关注的焦点。对于豌豆素质的退费流程,很多家长都希望能有一个全面清晰的了解。 首先,要明确退费的条件。一般来说,如果在课程未开始前申请退费,通常是比较容易办理的。比如因为个人时间安排冲突,提前向豌豆素质官方客服说明情况,经过核实后,会按照一定比例退还已缴纳的费用。 …

    2026年9月26日 • 用户投稿
    000
  • 研祥智能亮相2025工博会:工业智能,此刻正在爆发!

    研祥智能亮相2025工博会:工业智能,此刻正在爆发!研祥智能亮相2025工博会:工业智能,此刻正在爆发!研祥智能亮相2025工博会:工业智能,此刻正在爆发!研祥智能亮相2025工博会:工业智能,此刻正在爆发!

    9月23日,2025工博会正式拉开帷幕 创新浪潮席卷申城 人流与焦点在此交汇 在6.1HD005展位上 研祥智能开启了一场关于工业智能化的深度对话 全场景解决方案与自主可控成果重磅登场 本次展会,研祥智能携“5+N”全场景工业制造解决方案及20余款新品惊艳亮相,精准聚焦锂电制造、低空经济、智慧工厂、…

    2026年9月26日 • 用户投稿
    200
  • 对象的内存布局是怎样的?(对象头、实例数据、对齐填充)

    对象的内存布局是怎样的?(对象头、实例数据、对齐填充)对象的内存布局是怎样的?(对象头、实例数据、对齐填充)对象的内存布局是怎样的?(对象头、实例数据、对齐填充)对象的内存布局是怎样的?(对象头、实例数据、对齐填充)

    JVM中对象内存布局由对象头、实例数据和对齐填充三部分组成,对象头存储Mark Word和类型指针,实例数据按字段大小排序存放以优化对齐,对齐填充保证对象大小为8字节倍数以提升访问效率。 在Java虚拟机(JVM)中,一个对象在内存中的布局通常可以划分为三个主要部分:对象头(Object Heade…

    2026年9月26日 • 用户投稿
    200
  • 夸克88VIP送的会员怎么领取_88VIP赠送夸克会员兑换流程

    夸克88VIP送的会员怎么领取_88VIP赠送夸克会员兑换流程夸克88VIP送的会员怎么领取_88VIP赠送夸克会员兑换流程夸克88VIP送的会员怎么领取_88VIP赠送夸克会员兑换流程夸克88VIP送的会员怎么领取_88VIP赠送夸克会员兑换流程

    首先通过淘宝App进入“我的淘宝”-“88VIP”-“其他权益”,找到夸克网盘会员并绑定手机号完成领取;若未到账,需打开夸克App进入“会员中心”同步权益;确保淘宝与夸克登录手机号一致,避免领取失败。 如果您是淘宝88VIP会员,并希望领取夸克网盘提供的专属会员权益,但不清楚具体操作流程,可能会导致…

    2026年9月26日 • 用户投稿
    100
  • sublime怎么在mac上设置命令行工具_sublime Mac命令行工具配置

    sublime怎么在mac上设置命令行工具_sublime Mac命令行工具配置sublime怎么在mac上设置命令行工具_sublime Mac命令行工具配置sublime怎么在mac上设置命令行工具_sublime Mac命令行工具配置sublime怎么在mac上设置命令行工具_sublime Mac命令行工具配置

    首先确认Sublime可执行路径为/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl,接着创建软链接sudo ln -s /Applications/Sublime Text.app/Contents/SharedSuppor…

    2026年9月26日 • 用户投稿
    100
  • 可以穿梭时空的实时计算框架——Flink对时间的处理

    可以穿梭时空的实时计算框架——Flink对时间的处理可以穿梭时空的实时计算框架——Flink对时间的处理可以穿梭时空的实时计算框架——Flink对时间的处理可以穿梭时空的实时计算框架——Flink对时间的处理

    Flink对于流处理架构的意义十分重要,Kafka让消息具有了持久化的能力,而处理数据,甚至穿越时间的能力都要靠Flink来完成。 在streaming-大数据的未来一文中我们知道,对于流式处理最重要的两件事,正确性,时间推理工具。而flink对两者都有非常好的支持。 Flink对于正确性的保证 对…

    2026年9月26日 • 用户投稿
    300
  • Claude如何优化金融分析 Claude财经数据解读模型

    Claude如何优化金融分析 Claude财经数据解读模型Claude如何优化金融分析 Claude财经数据解读模型Claude如何优化金融分析 Claude财经数据解读模型Claude如何优化金融分析 Claude财经数据解读模型

    在金融分析领域使用claude类ai模型需注意四个关键点。一要确保输入数据质量高且结构化,如提供具体财报数字而非模糊描述;二要通过引导式提问促进深度分析,例如要求比较公司roe变化及原因;三要结合术语与通俗表达适应不同场景,比如让非专业者理解贝塔系数;四要注意模型局限性,不盲目依赖结论、关注数据时效…

    2026年9月26日 • 用户投稿
    100
  • 洗护行业不卷价格,差异化创新谋未来

    洗护行业不卷价格,差异化创新谋未来洗护行业不卷价格,差异化创新谋未来洗护行业不卷价格,差异化创新谋未来洗护行业不卷价格,差异化创新谋未来

    9月25日,由中国家电网主办的“净·呵护多·自由悦·美居2025中国家庭洗衣及烘护行业高峰论坛”在山东济南召开,来自澳柯玛、博世家电、卡萨帝、海尔、海立、海信、leader、小天鹅、荣事达、西门子家电、tcl、东芝、小鸭集团的洗护行业上下游企业代表,以及渠道合作伙伴京东家电家居、数据机构gfk中国、…

    2026年9月26日 • 用户投稿
    000
  • 拼多多床退了运费200多退吗?大件让我承担运费咋办?拼多多大件退货必看!200元运费这样退,维权攻略全解析!

    拼多多床退了运费200多退吗?大件让我承担运费咋办?拼多多大件退货必看!200元运费这样退,维权攻略全解析!拼多多床退了运费200多退吗?大件让我承担运费咋办?拼多多大件退货必看!200元运费这样退,维权攻略全解析!拼多多床退了运费200多退吗?大件让我承担运费咋办?拼多多大件退货必看!200元运费这样退,维权攻略全解析!拼多多床退了运费200多退吗?大件让我承担运费咋办?拼多多大件退货必看!200元运费这样退,维权攻略全解析!

    在拼多多购买床垫、沙发等大件商品后,若遭遇退货需自付200多元运费的情况,该如何应对?平台对此有何明确规定?本文将深入解读大件商品退货运费的责任归属规则,明确哪些情形下可主张由商家承担运费,哪些情况必须自行支付。同时提供一套完整的维权操作流程,涵盖证据留存、平台申诉及法律手段,一步步教你解决高额退货…

    2026年9月26日 • 用户投稿
    300
  • Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作

    Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作

    重置Safari可解决运行缓慢、加载异常等问题。首先通过Safari偏好设置清除历史记录与网站数据,并恢复各项功能至默认值;若问题依旧,可使用终端命令删除偏好文件及缓存实现深度重置;也可通过系统设置一次性清除所有浏览数据与扩展信息,重启后恢复初始状态。 如果您发现Safari浏览器运行缓慢、页面加载…

    2026年9月26日 • 用户投稿
    100
  • 检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?

    检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?

    检查型异常由编译器强制处理,代表可预期的外部问题,如文件不存在;非检查型异常为运行时异常,通常由程序逻辑错误引起,编译器不强制捕获。前者需显式处理或声明,体现健壮性设计;后者应通过预防避免,体现“快速失败”原则。自定义异常时,若调用方可恢复或需处理,应继承Exception;若为内部错误,则继承Ru…

    2026年9月26日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信