前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zend_Db_Adapter使用详情

Zend_Db_Adapter使用详情

作者头像
苦咖啡
发布2018-05-07 18:08:38
1.1K0
发布2018-05-07 18:08:38
举报
文章被收录于专栏:我的博客我的博客我的博客

Zend_Db_Adapter是zendfrmaeword的数据库抽象层api. 基于pdo, 你可以使用 Zend_Db_Adapter 连接和处理多种 数据库,包括:microsoft SQL Server,MySql,SQLite等等. 1.连接数据库

<?php require_once ‘Zend/Db.php’; $params = array (‘host’ => ‘127.0.0.1’, ‘username’ => ‘root’, ‘password’ => ‘root’, ‘dbname’ => ‘zendstudy’, charset’ => ‘utf8’) $db = Zend_Db::factory(‘PDO_MYSQL’, $params); ?>

2.SQL语句添加引号防止攻击

第一种是quote() 方法. 该方法会根据数据库adapter为标量加上 合适的引号;假如你试图对一个数组做quote操作, 它将为数组中 每个元素加上引号,并用”,”分隔返回. $value = $db->quote(‘St John”s Wort’); //$value 现在变成了 ‘St John\”s Wort’ $value = $db->quote(array(‘a’, ‘b’, ‘c’)); //$value现在变成了 ‘a’, ‘b’, ‘c'(“,”分隔的字符串) 第二种是 quoteInto() 方法. 你提供一个包含问号占位符的基础字符串 , 然后在该位置加入带引号的标量或者数组. 该 方法对于随需构建查询sql语句和条件语句是很有帮助的. 使用 quoteInto处理过的标量和数组返回结果与quote() 方法相同. $where = $db->quoteInto(‘id = ?’, 1);//id = 1 $where = $db->quoteInto(‘id IN(?)’, array(1, 2, 3));//id IN(1, 2, 3)

3.直接查询

$sql = $db->quoteInto(‘select * from `sys_course` where cid > ?’ , 0); $result = $db->query($sql); $rows = $result->fetchAll();//返回数组 你可以将数据自动的绑定到你的查询中。这意味着你在查询中可以设定多个指定的占位符,然后传送一个数组数据以代替这些占位符 $sql = ‘select * from `sys_course` where cid > :mycid and ccredit = :abc’; $data = array(‘mycid’=>’0′,’abc’=>’2’); $result = $db->query($sql,$data); $rows = $result->fetchAll();//返回数组 注意这里不再使用quteInto,其实如果多个参数你可使用多次quteInto进行连接sql语句

4.插入数据

为了方便起见,你可以使用 insert()方法将要插入的数据绑定并创建 一个insert语句(绑定的数据是自动进行加引号处理以避免数据库攻击的) 返回值并 不是 最后插入的数据的id,这样做的原因在于一些表 并没有一个自增的字段;相反的,这个插入的返回值是改变的数据行数(通常情况为1)。 假如你需要最后插入的数据id,可以在insert执行后调用 lastInsertId() 方法。 $bind = array(‘subject’ => ‘这是新闻标题’, ‘message’ => ‘这里可以存放很多很多内容,因为这是新闻内容~~’, ‘createtime’ => date(“Y-m-d”)); $table = ‘message’; $rows_affected = $db->insert($table, $bind);//返回的是插入的行数 $last_insert_id = $db->lastInsertId();//可以获取到主键的编号

5.更新数据

你可以使用 update() 方法确定需要update的数据并且创建一个 update语句(确定的数据是自动加引号处理以避免数据库攻击的)。你可以提供一个可选的where语句说明update的条件(注意:where语句并 不是一个绑定参数,所以你需要自己数据进行加引号的操作)。 $bind = array(‘subject’ => ‘更新标题’, ‘message’ => ‘这里可更新内容~~’, ‘createtime’ => date(“Y-m-d”)); $table = ‘message’; $where = ‘id = 8’;//这里可以使用$where = $db->quoteInto(‘id = ?’,8); $rows_affected = $db->update($table, $bind, $where);//返回的是更新影响的行数

6.删除数据

可以使用 delete() 方法创建一个delete语句;你 也可以提供一个where语句以说明数据的删除条件。(注意:where语句并不是一个绑 定参数,所以你需要自己进行数据加引号处理)。 $table = ‘message’; $where = ‘id = 8’;//这里可以使用$where = $db->quoteInto(‘id = ?’,8); $rows_affected = $db->delete($table, $where);//返回的是影响的行数

7.取回查询结果

尽管你可以使用query()方法直接对数据库进行操作,但是通常情况 下,仍然还是需要选择数据行并返回结果。以fetch开头的一系列的方法可以实现这个要求。对于每一种fetch系列的方法来说,你需 要传送一个select的sql语句;假如你在操作语句中使用指定的占位符,你也可以传送一个绑定数据的数组对你的操作语句进行处理和替换。 fetchAll() //取回结果集中所有字段的值,作为连续数组返回,二维数组,第一维是连续的 $result = $db->fetchAll(“select * from `message` where `id` > :id”,array(‘id’ => 0)); fetchAssoc()//取回结果集中所有字段的值,作为关联数组返回,第一维是用第一个字段的值作为键值,第一维可能不是连续的,二维数组 fetchCol()//取回所有结果行的第一个字段值。一维数组[手册中说是取回结果行的第一个字段名] 例子如下$result = $db->fetchCol(“select subject from `message` where `id` > :id”,array(‘id’ => 0)); fetchOne()//取回所有结果中第一个字段的值(一般用于统计,聚集函数使用) 例如:result = $db->fetchOne(“select count(*) from `message` where `id` > :id”,array(‘id’ => 0)); fetchPairs()//返回一维数组,键是第一个字段的值,值是第二个字段的值 $result = $db->fetchPairs(“select * from `message` where `id` > :id”,array(‘id’ => 0)); fetchRow()//取出满足条件的第一行,一维数组

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013年1月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档