如何在每次连接时使PDO适配器运行SET NAMES utf8,在ZendFramework中.我正在使用INI文件来保存适配器配置数据.我应该在那里添加什么条目?
如果不清楚,我正在寻找正确的语法,在我的项目的config.ini文件中,而不是在PHP代码中,因为我认为这是配置代码的一部分.
有没有人知道如何将Zend_Db的子句分组?基本上我有这个查询
$sql = $table->select()
->where('company_id = ?', $company_id)
->where('client_email = ?', $client_email)
->orWhere('client_email_alt = ?', $client_email);
Run Code Online (Sandbox Code Playgroud)
哪个给了我这个:
SELECT `clients`.* FROM `clients` WHERE (company_id = '1') AND (client_email = 'email@address.com') OR (client_email_alt = 'email@address.com')
Run Code Online (Sandbox Code Playgroud)
但我需要它给我这个,OR语句被分组:
SELECT `clients`.* FROM `clients` WHERE (company_id = '1') AND ((client_email = 'email@address.com') OR (client_email_alt = 'email@address.com'))
Run Code Online (Sandbox Code Playgroud) 在项目规模,学说与zend-db-table速度和性能方面,何时应该在Zend项目中使用doctrine,以及什么时候使用zend-db-table?
通常,这对我有用:
$db = Zend_Db_Table::getDefaultAdapter();
$where = $db->quoteInto('id = ?', $id);
$db->delete('tablename', $where);
Run Code Online (Sandbox Code Playgroud)
但我必须匹配两个ID.所以我真的不知道如何构建它.
WHERE first_id = 'id1' AND second_id = 'id2'
Run Code Online (Sandbox Code Playgroud)
那么我如何使用Zend Framework做到这一点?
我有一个数组的信息看起来或多或少像这样:
$data[] = array('content'=>'asd');
$data[] = array('content'=>'asdf');
Run Code Online (Sandbox Code Playgroud)
我想将两个条目添加到数据库中.
$db->insert('table', $data);
Run Code Online (Sandbox Code Playgroud)
不添加两个条目.我究竟做错了什么?我必须使用Zend_ Db_Table吗?
$data = array('content'=>'asdf');
$db->insert('table', $data);
Run Code Online (Sandbox Code Playgroud)
当然是有效的
扩展问题:为什么我应该使用数据映射器/ Db_Table_Row,因为DbTable能够处理大多数数据操作的基本任务.
我目前正在学习ZF v1.11
对于数据库操作,我为每个表创建了DbTable.例如,"users"表由Application_Model_DbTable_Users表示,其中没有附加代码.
在操作数据时,我可以使用:
<?php
$uTable = new Application_Model_DbTable_Users();
$newUid = $uTable->insert(array('name'=>'Old Name', 'email'=>''));
$user = $uTable->find($newUid)->current();
// Then I can use $user which is instance of Table_Row
$user->name = "New Name";
$user->email = "email@addr.com";
$user->save();
Run Code Online (Sandbox Code Playgroud)
我的问题是,何时需要定义一个行类(假设在ZF-Tutorials中将Table_Row称为DataMapper)
// By, adding this to the DbTable class
protected $_rowClass = 'Application_Model_User';
Run Code Online (Sandbox Code Playgroud)
为每个实体设置Row类有什么好处?任何人都可以指出我的最佳做法.
我目前使用Zend_Db来管理我的查询.我已经编写了代码,可以执行如下所示的查询:
$handle->select()->from('user_id')
->where('first_name=?', $id)
->where('last_name=?', $lname)
Run Code Online (Sandbox Code Playgroud)
假设Zend_Db会这样做,我没有清理输入就完成了这个.Zend会这样做吗?
另一个问题:Zend_Db是否清理insert('table', $data)和update查询?
谢谢.
我用这段代码在我的数据库中插入一个新行:
$data = array(
'key' => 'value'
);
$this->getDbTable()->insert($data);
Run Code Online (Sandbox Code Playgroud)
如何获取刚刚创建的此行的行ID?
我想知道表中有多少行.我使用的数据库是MySQL数据库.我已经有一个Db_Table类用于调用fetchAll().但我不需要表中的任何信息,只需要行数.如何在不调用的情况下获取表中所有行的计数fetchAll()?
我在尝试保存时收到错误"无法刷新行,因为父项丢失".这是我的代码
abstract class Webapp_Model_Resource_Db_Table_Abstract
extends Zend_Db_Table_Abstract
{
/**
* Save a row to the database
*
*
* @param array $info The data to insert/update
* @param Zend_DB_Table_Row $row Optional The row to use
* @return mixed The primary key
*/
public function saveRow($info, $row = null)
{
if (null === $row) {
$row = $this->createRow();
}
$columns = $this->info('cols');
foreach ($columns as $column) {
if (array_key_exists($column, $info)) {
$row->$column = $info[$column];
}
}
return $row->save();
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用saveRow()方法时,我传入$ _POST值($ …
zend-db-table ×10
zend-framework ×10
php ×6
mysql ×3
zend-db ×3
database ×1
doctrine ×1
pdo ×1