簡體   English   中英

在Zend_db_select中更改表名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM