2012-07-31 53 views
-1

我正在構建一個函數,它將動態生成SQL並使用PDO執行它,並準備好沒有列名/ where子句被硬編碼的語句。 where子句「卡路里」和「顏色」下面的示例是硬編碼的,我希望功能能夠添加其他標準以及在情況需要時少或不使用where子句。動態SQL函數

$sth = $dbh->prepare('SELECT name, colour, calories 
    FROM fruit 
    WHERE calories < ? AND colour = ?'); 
$sth->execute(array($calories, $colour)); 

這是一個插入函數,它允許您動態傳遞我創建的值。

public function insert($table,$columnValueArray){ 
    $columns = implode(",",array_keys($columnValueArray)); 
    $sql = "INSERT INTO ".$table." (?) VALUES (?)"; 
    $sth = $conn->prepare($sql); 

    foreach($columnValueArray as $singleArray){ 
     $values = implode(",",$singleArray); 
     $sth->execute(array($columns),$values); 
    } 
} 

我想此相似的功能創建一個更新的功能,問題是更新功能需要一個where子句可以

+0

誰可以標記我,請提供一個理由。我想知道這是不是解決這個問題的正確方法? – Colin747 2012-07-31 20:25:39

+1

我想你是因爲沒有提出問題而被低估的。您陳述了要求,但沒有顯示任何嘗試自己解決它。 – JNK 2012-07-31 20:29:15

+0

@ Colin747:請勿將代碼發佈到評論中。回去編輯這些新的細節到問題中。就目前而言,你的問題有可能被關閉。 – talonmies 2012-08-01 04:08:34

回答

0

我居然做了一個類似的答案有些陣列中的每一行改變前段時間這個問題:

PDO multi-Filter sql query

它會動態地構建基於名爲PARAM基本WHERE條款從$_POST陣列結合,這樣就不會與0123合作params,但說實話,我不確定爲什麼你依靠數組的順序來阻止SQL注入和其他類似的攻擊,因爲數組的順序不能總是在PHP中保證。