标签: zend-db

如何在Zend_Db和QuoteInto的更新语句中使用多个条件

使用Zend Framework,有没有办法使用quoteInto方法将多个条件传递给更新语句?我发现了一些对这个问题的引用,但我正在寻找一种支持的方式,而不必扩展Zend_Db或没有连接.

$db = $this->getAdapter();
$data = array('profile_value' => $form['profile_value']);
$where = $db->quoteInto('user_id = ?', $form['id'])
       . $db->quoteInto(' AND profile_key = ?', $key);         
$this->update($data, $where);
Run Code Online (Sandbox Code Playgroud)

参考

zend-framework zend-db

16
推荐指数
2
解决办法
2万
查看次数

使用多个AND运算符的Zend_Db的复杂WHERE子句

我想在Zend_Db中生成这个复杂的WHERE子句:

SELECT * 
FROM 'products' 
WHERE 
    status = 'active' 
    AND 
    (
        attribute = 'one' 
        OR 
        attribute = 'two' 
        OR 
        [...]
    )
;
Run Code Online (Sandbox Code Playgroud)

我试过这个:

$select->from('product');
$select->where('status = ?', $status);
$select->where('attribute = ?', $a1);
$select->orWhere('attribute = ?', $a2);
Run Code Online (Sandbox Code Playgroud)

那产生了:

SELECT `product`.* 
FROM `product` 
WHERE 
    (status = 'active') 
    AND 
    (attribute = 'one') 
    OR 
    (attribute = 'two')
;
Run Code Online (Sandbox Code Playgroud)

我确实找到了一种方法来完成这项工作,但我觉得通过先使用PHP组合"OR"子句然后使用Zend_Db where()子句将它们组合起来,这有点"作弊".PHP代码:

$WHERE = array();
foreach($attributes as $a):
    #WHERE[] = "attribute = '" . $a . "'";
endforeach;
$WHERE = implode(' OR ', $WHERE);

$select->from('product');
$select->where('status …
Run Code Online (Sandbox Code Playgroud)

php sql zend-framework zend-db

15
推荐指数
2
解决办法
1万
查看次数

如何在ZF2字段集中访问数据库适配器?

我已经按照一个示例,并希望将数据库适配器传递给字段集以创建下拉菜单.

下面的代码是我如何调用fieldset.
如何访问BrandFieldset类中的数据库适配器?

$this->add(array(
    'type' => 'Application\Form\BrandFieldset',
    'name' => 'brand',
    'options' => array(
        'label' => 'Brand of the product',
    ),
));
Run Code Online (Sandbox Code Playgroud)

php zend-framework zend-form zend-db zend-framework2

15
推荐指数
1
解决办法
260
查看次数

Zend DB fetchAll():where子句数组与IN运算符

我正在使用相当于此查询的数据库从数据库中选择记录:

SELECT * FROM reports WHERE user_id IN (3, 6, 22);
Run Code Online (Sandbox Code Playgroud)

调用fetchAll()的函数有一个参数,它是一个用户ID数组,这个调用工作得很好:

$resultSet = $this->getDbTable()->fetchAll('user_id IN (' . implode(', ', $userIds) . ')');
Run Code Online (Sandbox Code Playgroud)

但是,我想为where子句使用一个数组,因为稍后可能会对查询有其他限制...而且我无法弄明白我的生活.我认为这将是以下的一些变化:

$resultSet = $this->getDbTable()->fetchAll(array('user_id IN ?' => '(' . implode(', ', $userIds) . ')'));
Run Code Online (Sandbox Code Playgroud)

但到目前为止还没有骰子.有人可以在这里提供正确的语法吗?

php sql zend-db

14
推荐指数
1
解决办法
2万
查看次数

我为什么要在Zend_Db上使用Doctrine?

我在一些项目中使用Zend_Db,我发现Doctrine有一段时间但从未实际使用它.

Doctrine比Zend_Db有什么优势?使用Doctrine有什么好处?

顺便说一句,使用Zend Framework 1.10.7的Doctrine是否容易?与其他组件集成和使用?因为它似乎不存在Doctrine适配器

谢谢

doctrine zend-framework zend-db

14
推荐指数
1
解决办法
2636
查看次数

Zend DB Select:ORDER BY FIELD('id',some_array) - 怎么样?

您如何在Zend框架中编写以下查询?

SELECT * FROM table_name ORDER BY FIELD(field_name, 'Small','Medium','Large');

我只需要"订购"部分:)

谢谢!

mysql zend-framework zend-db

14
推荐指数
1
解决办法
1万
查看次数

Zend Framework:如何检索最后插入行的id?

我用这段代码在我的数据库中插入一个新行:

$data = array(
    'key' => 'value'
);
$this->getDbTable()->insert($data);
Run Code Online (Sandbox Code Playgroud)

如何获取刚刚创建的此行的行ID?

php zend-framework zend-db-table zend-db

12
推荐指数
2
解决办法
3万
查看次数

使用Zend DB Select选择任意字符串?

我正在使用流畅的界面来创建Zend DB Select对象/查询.作为查询的一部分,我想选择一个任意字符串,例如"SELECT'foo'AS'type'FROM ...".foo不是一个列,它只是一个字符串文字.

当我选择任意数字时,查询按预期工作.当我将其更改为字符串时,Zend会尝试将foo视为列,并抛出错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'l.foo' in 'field list'
Run Code Online (Sandbox Code Playgroud)

我尝试以各种方式在Zend_Db_Expr中包装字符串,例如:

$select->columns(array('type' => new Zend_Db_Expr('foo')));
Run Code Online (Sandbox Code Playgroud)

这会阻止Zend添加相关名称,但它仍然将其视为列:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'foo' in 'field list'
Run Code Online (Sandbox Code Playgroud)

我觉得我必须在这里遗漏一些明显的东西.我如何告诉Zend停止将其视为一个列?

zend-framework zend-db

11
推荐指数
1
解决办法
3304
查看次数

Zend DB选择常量 - 表中不存在的列

我正在尝试使用Zend DB select来执行此查询,但我无法这样做

这是sql查询

select shopping_id,shopping_details,"friend" as type
from shopping

请注意我如何指定"朋友"作为类型,而朋友不是购物表中的列.

现在我如何在Zend中做到这一点.我试过这个但它给了我一个错误说"sh.friend Column不存在"

$select->from(array('sh'=>'shopping'),array('shopping_id','shopping_details','"friend" as type');

任何帮助将不胜感激

zend-framework zend-db-table zend-db zend-db-select

11
推荐指数
1
解决办法
4746
查看次数

为Zend_Db设置字符集的最佳方法(或者至少比我目前正在做的更好)

我正在使用Zend_DB并尝试将charset更改为utf8,这里是代码:

config.ini:

[development]
db.host = "localhost"
db.username = "root"
db.password = "toor"
db.dbname = "db_whoopdiedo"
db.charset = "utf8"
Run Code Online (Sandbox Code Playgroud)

bootstrap.php:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    public function _initAutoload() 
    {
        Zend_Registry::set(
            'config',
            new Zend_Config_Ini(APPLICATION_PATH.'/configs/config.ini', 'development')
        );

        Zend_Registry::set(
            'db',
            Zend_Db::factory('Pdo_Mysql', Zend_Registry::get('config')->db)
        );

        Zend_Registry::get('db')->setFetchMode(Zend_Db::FETCH_OBJ);
        Zend_Registry::get('db')->query("SET NAMES 'utf8'");
        Zend_Registry::get('db')->query("SET CHARACTER SET 'utf8'");
   }
}
Run Code Online (Sandbox Code Playgroud)

我认为在配置中添加charset就足够了,但是只有在我直接使用以下设置时才应用它:

Zend_Registry::get('db')->query("SET NAMES 'utf8'");
Zend_Registry::get('db')->query("SET CHARACTER SET 'utf8'");
Run Code Online (Sandbox Code Playgroud)

我的问题:有没有更好的方法来设置charset,也许配置明智?

php mysql zend-framework character-encoding zend-db

11
推荐指数
1
解决办法
7880
查看次数