【发布时间】:2014-04-01 18:11:23
【问题描述】:
我有这一系列的标题。
$first = array('title','first_name','surname','phone','email',
'add1','add2','add3','add4','add5');
这些既是数据库中的列标题,也是网页上不同表单项的名称。通过在$first 中列出它们,我可以使用此数组链接到数据库以及使用以下代码在表单提交时创建的POST 值。
$sql = "INSERT INTO first_page_data (" . implode(',',$first) . ") VALUES (" . implode(',', array_fill(0, count($first), '?')) . ")";
$stmt = $db->prepare($sql);
foreach($first as $key=>$val){
$stmt->bindValue($key+1, $_POST[$val], PDO::PARAM_STR);
$stmt->execute();
此代码将使用 $first 数组创建一个有效的 SQL 查询(还将为未命名的占位符创建正确数量的问号)。然后它将遍历将POST 值绑定到正确问号的数组。
这段代码可以正常工作,但我现在正试图将其调整为UPDATE 查询而不是INSERT,这是我遇到的绊脚石:
INSERT 查询具有数据库列标题的完整列表,然后是它们的值的完整列表,而 UPDATE 需要它们的标题:值对(据我所知!)。
有没有办法使用 2 个单独的列表进行更新(根据 INSERT),还是我必须将 $first 数组和 POST 数组分成“对”?
解决方案
以下是有效的 SQL 语句:
$sql = "UPDATE first_page_data SET " . implode(", ", array_map(function($v){ return "$v=?"; }, array_values($combined))) . " WHERE email = ?";
它很大程度上基于公认的答案,并进行了一些调整以使其正常工作!
【问题讨论】: