[英]Changing table name in Zend_db_select
SELECT SUM(Table.ColumnThatChanges) AS 'Count', Table.B as 'Param'
FROM Table
WHERE Table.C = 4
AND Table.B = 'Something'
AND Table.Date BETWEEN '2014-01-01 00:00:00' AND '2014-06-30 00:00:00'
我有我在php中生成的此SQL查询。 我想稍作更改就多次调用此查询; 我正在更改ColumnThatChanges每个请求。
什么是更好/最快的方法? 使用str_replace? 每次都调用整个字符串吗? 使用某种类型的类生成我的SQL语句?
我目前正在Zend中以这种方式生成它:
$somequery = $this->db->select();
$somequery->from(Table, array('SUM(Table.ColumnThatChanges) AS Count', 'Table.B as Param'))
->where('C = ?', $Variable)
->where('B = ?', $Variable2)
->where('Date > ?', $start_date)
->where('Date < ?', $end_date);
更改查询的ColumnThatChanges部分并没有取得很大的成功,也许我做错了吗?
如果可以使用PDO
扩展,则为此准备了一些声明
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
在Zend Framework中,可以使用Zend_Db_Statement实现
UPD如果你想改变列,它说在这里 ,你可以使用columns
方法或第二个参数from
方法;
$select = $db->select()
->from(array('p' => 'products'), 'product_id')
->columns('product_name');
然后,如果要更改任何内容,只需保留$select
对象。
UPD-2 Bill Karwin为问题的最新版本提供了更好的答案。 请看一下。
如果您使用的是PDO,则可以绑定参数。 因此,遍历您的条目,并使用不同的数据执行。 我不确定是否很清楚……哦,等等,baldrs有一个例子。 但是,您也可以传递一个数组来执行:
$stuff = array(':name' => 'one', ':value' => 1);
$stmt->execute($stuff);
我为Zend Framework 1.0编写了Zend_Db_Select。 没有方法可以替换选择列表中的列,而只能添加或插入列。
不过,创建自定义类以添加此功能并不难。
class My_Db_Select extends Zend_Db_Select
{
public function clearColumns() {
$this->_parts[self::COLUMNS] = array();
}
}
测试清除列并添加其他列:
$sel = new My_Db_Select($db);
$sel->from("foo", array());
$sel->columns(array("SUM(foo.red)", "id"), "foo");
echo $sel . "\n";
$sel->clearColumns();
$sel->columns(array("SUM(foo.blue)", "id"), "foo");
echo $sel . "\n";
输出:
SELECT SUM(foo.red), `foo`.`id` FROM `foo`
SELECT SUM(foo.blue), `foo`.`id` FROM `foo`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.