CodeIgniter php sql

php中文网
发布: 2016-06-23 14:36:13
原创
1026人浏览过

ci对数据库句的操作有时很方便有时却让人为难,例如括号的问题。括号的问题来自于处理and和or的优先级关系。

有时需要or高于and。$this->db->where()和$this->db->orwhere()要如何做到呢。

第一种:自己写sql语句。可是有时候已经写好的程序要这样改动很难。

第二种:自己写where语句,有可能会遇到这样的问题。

where()和orwhere()其实是雷同的函数。

立即学习PHP免费学习笔记(深入)”;

手册中有这样一段:

 

DM建站系统律师事务所HTML5网站模板1.7
DM建站系统律师事务所HTML5网站模板1.7

DM建站系统律师事务所HTML5网站模板, DM企业建站系统。是由php+mysql开发的一套专门用于中小企业网站建设的开源cms。DM系统的理念就是组装,把模板和区块组装起来,产生不同的网站效果。可以用来快速建设一个响应式的企业网站( PC,手机,微信都可以访问)。后台操作简单,维护方便。DM企业建站系统安装步骤:第一步,先用phpmyadmin导入sql文件。 第二步:把文件放到你的本地服务器

DM建站系统律师事务所HTML5网站模板1.7 0
查看详情 DM建站系统律师事务所HTML5网站模板1.7
$this->db->where();

本函数允许你使用四种方法中的一种来设置 WHERE 子句:

说明: 传递给本函数的所有值都会被自动转义,以便生成安全的查询。

简单的 key/value 方法: $this->db->where('name', $name);

// 生成: WHERE name = 'Joe'

请注意等号已经为你添加。

如果你多次调用本函数,那么这些条件会被 AND 连接起来:

$this->db->where('name', $name);
$this->db->where('title', $title);
$this->db->where('status', $status);

// WHERE name = 'Joe' AND title = 'boss' AND status = 'active' 自定义 key/value 方法:

你可以在第一个参数中包含一个运算符,以便控制比较:

$this->db->where('name !=', $name);
$this->db->where('id
// 生成: WHERE name != 'Joe' AND id $name, 'title' => $title, 'status' => $status);

$this->db->where($array);

// 生成: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'

使用这个方法时你也可以包含运算符:

$array = array('name !=' => $name, 'id $id, 'date >' => $date);

$this->db->where($array); 自定义字符串:

你可以手动的编写子句:

$where = "name='Joe' AND status='boss' OR status='active'";

$this->db->where($where);

$this->db->where() 接受可选的第三个参数。如果你将它设置为 FALSE, CodeIgniter 将不会为你那些包含反勾号的字段名或表名提供保护。

$this->db->where('MATCH (field) AGAINST ("value")', NULL, FALSE);

 

标红的地方很重要,第4所说的:

$where = "name='Joe' AND status='boss' OR status='active'";

$this->db->where($where);

其实是行不通的。where()会给语句加上``,然后说:

"`name='Joe' AND status='boss' OR status='active'`"sql语句有错。

第三种:

改源代码:

CI论坛里有这样一段:

... ...

给like数组加上括号即可。
修改system\database\DB_active_rec.php
约第1559行

PHP

                if ( count ( $this -> ar_like ) > 0 )
                {
                        if ( count ( $this -> ar_where ) > 0 )
                        {
                                $sql .= "nAND " ;
                        }
 
                        $sql .= implode ( "n" , $this -> ar_like ) ;
 
                }


改为

PHP

                if ( count ( $this -> ar_like ) > 0 )
                {
                        if ( count ( $this -> ar_where ) > 0 )
                        {
                                $sql .= "nAND (" ;
                        }
 
                        $sql .= implode ( "n" , $this -> ar_like ) ;
                       
                        if ( count ( $this -> ar_where ) > 0 )
                        {
                                $sql .= ")" ;
                        }
                }


希望CI开发者尽快修补or_like无法内部形成括号的BUG
这个论坛很脑残,显示回车符\n会掉一个斜杠,懂PHP的自己加上。

源自:http://codeigniter.org.cn/forums/thread-1270-1-1.html

同理,可以对where修改,但是这种只是对where语句的开始和末尾加。

 

对于实际的需要,几种合起来用基本情况都能解决了。不知道是不是还有更好的。呵呵,那应该就是直接修复CI源代码内部形成括号的BUG了吧

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号