2012-07-31 86 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中保证。