开发者社区> 技术小甜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Zend Framework中,执行自定义sql语句

简介:
+关注继续查看

Zend Framework中的Zend_Db_Table类可以很好的对数据表实现select,insert,delete等操作。但是有时候还是希望自己运行一些sql语句。

ZF当然也是支持的。

一种方法是ZF文档上并未提及的,可以直接使用Zend_Db_Adapter的query语句执行sql。

比如某个类中(继承了Zend_DB_Table),可以如下方式使用:

1
2
$sql "delete from options where id=?";
$this->getAdapter()->query($sqlarray('1'));

需要注意的是,在ZF的帮助文档中,都是采用了?方式的占位符。这是在数据库adapter设为mysqli的时候才这样用的。如果数据库adapter采用的是PDO_MYSQL,则不能使用问号占位符,而是得使用参数化的方式,例如,如果上面的sq要改成PDO_MYSQL环境下,则是如下:

1
2
$sql "delete from options where id=:id";
return $this->getAdapter()->query($sqlarray("id"=>1));

事实上,如果用get_class方法查看两者Adapter的区别,不同环境下get_class($this->getAdapter())返回值是不同的。

PDO_MYSQL 环境下 为Zend_Db_Adapter_Pdo_Mysql

mysqli 环境下为 Zend_Db_Adapter_Mysqli

ZF帮助中提到的一种做法是使用Zend_Db_Statement,Zend_Db_Statement类是一个抽象类,使用的时候必须使用具体的子类,同样的,根据当前数据库连接方式不同,子类就不同不同,如果是mysqli,则使用Zend_Db_Statement_Mysqli,如果是PDO_MYSQL,则使用Zend_Db_Statement_Pdo。

例子如下,还是要注意一点,就是占位符的不同:

PDO_MYSQL 环境下 :

1
2
3
$sql ='delete from options where id=:id';
$stmt new Zend_Db_Statement_Pdo($this->getAdapter(), $sql);
return $stmt->execute(array(":id" => $id));

mysqli 环境下为:

1
2
3
$sql = 'delete from options where id=?';
$stmt = new Zend_Db_Statement_Mysqli($this->getAdapter(), $sql);
return $stmt->execute(array($id));

值得注意的是,ZF中,如果不使用Zend_Db_Statement,而是采用其自带的Adapter,并且用到where方法的时候,则不管数据库连接方式是PDO_MYSQL或者是mysqli,都是使用问号占位符的方式。比如下面的例子:

1
2
3
$where $this->getAdapter()->quoteInto('id=?', 37);
$result $this->fetchAll($where);
return $result->toArray();

总结,使用ZF执行sql的时候,要注意数据库连接方式,采取正确的方式传递sql参数。















本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/1315910,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Mysql常用sql语句(5)- as 设置别名
Mysql常用sql语句(5)- as 设置别名
85 0
Mysql常用sql语句(13)- having 过滤分组结果集
Mysql常用sql语句(13)- having 过滤分组结果集
69 0
mysql常用sql语句
本文主要介绍基本的 SQL 语句,数据的增删查改等。
73 0
MySQL系列专题(2)-MySQL的SQL语句和高级特性
MySQL系列专题(2)-MySQL的SQL语句和高级特性
93 0
MySQL关于SQL语句的一些题目
MySQL关于SQL语句的一些题目 1、用一条SQL语句查询出每门课都大于80的学生的姓名 (1)SELECT NAME FROM score GROUP BY NAME HAVING MIN(grade) > 80 (2)SELECT DISTINCT NAME FROM score WH.
1537 0
***mysql中查询今天、昨天、上个月sql语句
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天Select * FROM 表名 Where TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名)
1056 0
MySQL的一些常用的SQL语句整理
安装MySQL有两种的方式,一种是解压版本,但是需要配置环境变量,相对而言比较麻烦。所以我们一般采取第二种方式,那就是到MySQL的官网上下载安装版。这样就会省去很多麻烦,在这里我就不再详细的介绍具体的安装过程了,百度一下,Google,上面有手把手的教程。
871 0
【C/C++学院】(21)Mysql数据库编程--开发简介/SQL语句
<h1><span style="line-height:1.5"><span style="font-size:18px">一.mysql安装与管理</span></span></h1> <div><span style="line-height:1.5; font-size:18px; font-family:'Microsoft YaHei UI','Microsoft YaHei
1219 0
利用tcpdump抓取mysql sql语句
这个脚本是我之前在网上无意间找个一个利用tcpdump 抓包工具获取mysql流量,并通过过滤把sql 语句输入。 脚本不是很长,但是效果很好。 #!/bin/bash #this script used montor mysql network traffic.
997 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
SQL Server 2017
立即下载
SQL Sever迁移PG经验
立即下载
MaxCompute SQL计算成本调优以及优化方法
立即下载