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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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( $sql array ( '1' ));

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

1
2
$sql  "delete from options where id=:id" ;
return  $this ->getAdapter()->query( $sql array ( "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,如需转载请自行联系原作者


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL XML Java
Mybatis Plus自定义全局SQL注入
Mybatis Plus自定义全局SQL注入
78 0
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
87 0
|
3月前
|
SQL 数据库
在mybatis-plus怎么使用自定义的sql语句
在mybatis-plus怎么使用自定义的sql语句
62 0
|
6月前
|
SQL 关系型数据库 MySQL
MyBatis-plus执行自定义SQL
MyBatis-plus执行自定义SQL
101 0
|
3月前
|
SQL XML Java
关于mybatis-plus写自定义方法(自定义sql)
关于mybatis-plus写自定义方法(自定义sql)
72 1
|
4月前
|
SQL 关系型数据库 MySQL
mp自定义sql注入
mp自定义sql注入
27 0
|
6月前
|
SQL 关系型数据库 MySQL
MyBatis-plus配置自定义SQL(执行用户传入SQL)
MyBatis-plus配置自定义SQL(执行用户传入SQL)
102 0
|
8月前
java202304java学习笔记第六十六天-ssm-动态sql-自定义dataTypeHandle之1
java202304java学习笔记第六十六天-ssm-动态sql-自定义dataTypeHandle之1
44 0
|
8月前
java202304java学习笔记第六十六天-ssm-动态sql-自定义dataTypeHandle之2
java202304java学习笔记第六十六天-ssm-动态sql-自定义dataTypeHandle之2
35 0
|
8月前
java202304java学习笔记第六十六天-ssm-动态sql-自定义dataTypeHandle之1
java202304java学习笔记第六十六天-ssm-动态sql-自定义dataTypeHandle之1
36 0