数据库常用操作

  基本查询 要提交一个查询,使用 query 函数:

$query = $this->db->query('YOUR QUERY HERE');   //当你执行读类型的查询(如:SELECT)时,query() 函数将以**对象**形式 返回一个结果集,参考这里来 显示你的结果。 当你执行写类型的查询(如:INSERT、DELETE、UPDATE)时,函数将简单的返回 TRUE 或 FALSE 来表示操作是否成功。 你可以将函数返回的结果赋值给一个变量,这样你就可以根据这个变量来获取 数据了


转义查询

$this->db->escape() 这个函数会检测数据类型,仅转义字符串类型的数据。 它会自动用单引号将你的数据括起来,你不用手动添加:

$sql="INSERT INTO table (title) VALUES(".$this->db->escape($title).")";

$this->db->escape_str() 这个函数忽略数据类型,对传入的数据进行转义, 这个方法并不常用,一般情况都是使用上面的那个方法。方法的使用代码如下:

$sql="INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";

$this->db->escape_like_str() 这个函数用于处理 LIKE 语句中的字符串,

这样,LIKE 通配符('%', '_')可以被正确的转义。

$search='20% raise';$sql="SELECT id FROM table WHERE column LIKE '%".$this->db->escape_like_str($search)."%' ESCAPE '!'";


查询绑定

$sql="SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";

$this->db->query($sql,array(3,'live','Rick'));

查询语句中的问号将会自动被第二个参数位置的数组的相应的值替代

也可以使用数组的数组进行绑定,里面的数组会被转换成 IN 语句的集合:

$sql="SELECT * FROM some_table WHERE id IN ? AND status = ? AND author = ?";

$this->db->query($sql,array(array(3,6),'live','Rick'));

上面的例子会被转换为这样的查询:

SELECT*FROMsome_table WHERE id IN(3,6) AND status='live' AND  author='Rick'

使用查询绑定的第二个好处是:所有的值会被自动转义,生成安全的查询语句。 你不再需要手工进行转义,系统会自动进行


错误处理

$this->db->error();

要获取最近一次发生的错误,使用 error() 方法可以得到一个包含错误代码和错误消息的数组。 这里是一个简单例子:

if(!$this->db->simple_query('SELECT `example_field` FROM `example_table`')){$error=$this->db->error();// Has keys 'code' and 'message'}


生成查询结果

result() 方法    以**对象数组**形式返回查询结果,如果查询失败返回**空数组**。

$query=$this->db->query("YOUR QUERY");

foreach($query->result() as $row){

    echo  $row->title;

    echo  $row->name;

    echo  $row->body;

}


result_array() 方法

这个方法以 一个纯粹的数组 形式返回查询结果,如果无结果,则返回一个空数组。一般情况下,你会像下面这样在一个 foreach 循环中使用它:

$query=$this->db->query("YOUR QUERY");

foreach($query->result_array()  as  $row){

   echo $row['title'];

   echo $row['name'];

   echo $row['body'];

}


结果行

row() 方法

这个方法返回单独一行结果。如果你的查询不止一行结果,它只返回第一行。返回的结果是 对象 形式,这里是用例:

$query=$this->db->query("YOUR QUERY");

$row=$query->row();

if(isset($row)){

    echo  $row->title;

    echo  $row->name;

    echo  $row->body;

}

如果你要返回特定行的数据,你可以将行号作为第一个参数传给这个方法:

$row=$query->row(5);



row_array() 方法

这个方法除了返回结果是一个数组而不是一个对象之外,其他的和上面的 row() 方法完全一样。举例:

$query=$this->db->query("YOUR QUERY");

$row=$query->row_array();

if(isset($row)){

   echo  $row['title'];

   echo  $row['name'];.

    echo$row['body'];

}

如果你要返回特定行的数据,你可以将行号作为第一个参数传给这个方法:

$row=$query->row_array(5);


结果辅助方法

num_rows() 方法

该方法返回查询结果的行数。注意:在这个例子中,$query 变量为查询结果对象:

$query=$this->db->query('SELECT * FROM my_table');

echo $query->num_rows();


num_fields() 方法

该方法返回查询结果的字段数(列数)。在你的查询结果对象上调用该方法:

$query=$this->db->query('SELECT * FROM my_table');

echo   $query->num_fields();


free_result() 方法

该方法释放掉查询结果所占的内存,并删除结果的资源标识。通常来说, PHP 会在脚本执行结束后自动释放内存。但是,如果你在某个脚本中执行大量的查询, 你可能需要在每次查询之后释放掉查询结果,以此来降低内存消耗。

举例:

$query=$this->db->query('SELECT title FROM my_table');

foreach($query->result()as$row){

echo   $row->title;

}

$query->free_result();// The $query result object will no longer be available

$query2=$this->db->query('SELECT name FROM some_table');

$row=$query2->row();

echo$row->name;

$query2->free_result();  // The $query2 result object will no longer be available



查询辅助函数

$this->db->insert_id()    当执行 INSERT 语句时,这个方法返回新插入行的ID。

$this->db->affected_rows()   当执行 INSERT、UPDATE 等写类型的语句时,这个方法返回受影响的行数。

$this->db->last_query()    该方法返回上一次执行的查询语句(是查询语句,不是结果)

关于数据库的信息

$this->db->count_all()   该方法用于获取数据表的总行数,第一个参数为表名  

echo  $this->db->count_all('my_table');   // Produces an integer, like 25

$this->db->platform()   该方法输出你正在使用的数据库平台(MySQL,MS SQL,Postgres 等):

$this->db->version()   该方法输出你正在使用的数据库版本:

让你的查询更简单

$this->db->insert_string()   所有的值自动被转义,生成安全的查询语句。

这个方法简化了 INSERT 语句的书写,它返回一个正确格式化的 INSERT 语句。 举例:

$data=array('name'=>$name,'email'=>$email,'url'=>$url);

$str=$this->db->insert_string('table_name',$data);


$this->db->update_string()  这个方法简化了 UPDATE 语句的书写,它返回一个正确格式化的 UPDATE 语句  所有的值自动被转义,生成安全的查询语句。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,561评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,218评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,162评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,470评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,550评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,806评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,951评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,712评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,166评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,510评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,643评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,306评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,930评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,745评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,983评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,351评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,509评论 2 348

推荐阅读更多精彩内容