【发布时间】:2014-10-19 03:14:45
【问题描述】:
我使用两个 foreach 循环将值绑定到位置参数,一个用于INSERT INTO,另一个用于DUPLICATE KEY UPDATE。我试图将其减少到一个循环。但是 array_merge 没有用。有人可以告诉我如何只使用一个循环来完成它吗?
这是一个例子:
$facts = array("age","race");
$ifield = "";
$ufield="";
$comma = "";
foreach($facts as $f)
{
$$f = (isset($_POST["$f"])?$_POST["$f"]:"");
if ($$f)
{
$ifield .= $comma.$f;
$ufield .= "{$comma}{$f} = ?";
$comma = ",";
}
}
$i = explode(',',$ifield);
$in = str_repeat('?,', count($i) - 1) . '?';
$sql .= "INSERT INTO `users` (user_id,model_no,{$ifield}) VALUES(?,?,$in)";
$sql .= " ON DUPLICATE KEY UPDATE $ufield";
$users = $dbh->prepare($sql);
$user_id = $_SESSION['user_id'];
$model_no = $_POST["model_no"];
$users->bindValue(1,$user_id);
$users->bindValue(2,$model_no);
/****************************************************************/
$i = 3;
foreach($facts as $f)
{
global $$f;
if ($$f)
{
$users->bindValue($i++, $$f);
}
}
foreach($facts as $f)
{
global $$f;
if ($$f)
{
$users->bindValue($i++, $$f);
}
}
$users->execute();
【问题讨论】:
-
你能举一个_POST数组的例子吗?