您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > PHP框架 > ZendFramework

Zend Framework中如何执行自定义sql语句

作者:  来源:互联网  日期:2013-11-02 11:36:04
收藏  评论:( 1 )  阅读:1944

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

ZF当然也是支持的。

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

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

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

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

$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 环境下 :

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

mysqli 环境下为:

$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,都是使用问号占位符的方式。比如下面的例子:

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

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

原文地址:http://cnn237111.blog.51cto.com/2359144/1315910



除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/zend/521.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论
UncleToo,一档有态度的PHP中文网

图片教程