Php 为什么要将sql查询转换为Zend_Db样式?

Php 为什么要将sql查询转换为Zend_Db样式?,php,zend-framework,zend-db,Php,Zend Framework,Zend Db,我想问一下为什么人们使用zend_db风格 e、 g $select = $d2b->select() ->from('users', array('userid','username')) ->where('userid=?', 2); $result = $d2b->fetchRow($select); echo $result->username; 而不是 $result = $d2b-&g

我想问一下为什么人们使用zend_db风格

e、 g

     $select = $d2b->select()
             ->from('users', array('userid','username'))
             ->where('userid=?', 2);

 $result = $d2b->fetchRow($select);
 echo $result->username;
而不是

$result = $d2b->fetchAll('SELECT * FROM users WHERE userid = ?', 2);
echo $result[0]->username;

哪一个更好?或者是相同的,只是为了可维护性。

最终结果是相同的,所以这取决于您个人对可读性和可维护性的偏好

fluent界面样式的一个优点是,它可以更容易地以编程方式构建查询,例如:

$select = $d2b->select()
         ->from('users', array('userid','username'));

if ([some condition]) {
    $select->where('userid = ?', 2);
} else {
    $select->where('userid = ?', 62);
}

最终的结果是一样的,所以这取决于您个人对可读性和可维护性的偏好

fluent界面样式的一个优点是,它可以更容易地以编程方式构建查询,例如:

$select = $d2b->select()
         ->from('users', array('userid','username'));

if ([some condition]) {
    $select->where('userid = ?', 2);
} else {
    $select->where('userid = ?', 62);
}

一个原因是使用Zend_db风格抽象了SQL的生成;这意味着,我们在数据库引擎之间切换就像交换一个类一样简单,而不必重新编写不兼容的查询


此外,Zend_db抽象出SQL查询转义,大大降低了SQL注入攻击的风险。它还为那些不懂SQL的人提供数据库查询功能。

一个原因是使用Zend_db风格可以抽象出SQL的生成;这意味着,我们在数据库引擎之间切换就像交换一个类一样简单,而不必重新编写不兼容的查询


此外,Zend_db抽象出SQL查询转义,大大降低了SQL注入攻击的风险。它还为不懂SQL的用户提供数据库查询功能。

+1加上Richard Ye提到的RDBMS之间的可移植性。+1加上Richard Ye提到的RDBMS之间的可移植性。谢谢!对不起,我的英语不是很好。当你说抽象出来时,你的意思是当我们采用zend_db风格时,我们不需要特别考虑sql注入,比如addslashes等?它是在zend db类上自动完成的?抽象基本上是为您完成工作的其他东西,通常是一项简单、可重复的任务。例如,+运算符是加法函数的抽象。函数本身实际上操纵内存中的一堆位,但这是你不必做的事情,因为它已经为你抽象出来了。谢谢!对不起,我的英语不是很好。当你说抽象出来时,你的意思是当我们采用zend_db风格时,我们不需要特别考虑sql注入,比如addslashes等?它是在zend db类上自动完成的?抽象基本上是为您完成工作的其他东西,通常是一项简单、可重复的任务。例如,+运算符是加法函数的抽象。函数本身实际上操纵内存中的一堆位,但这是你不必做的事情,因为它是为你抽象出来的。两者都有优点和缺点。两者都有优点和缺点。