[英]php pdo update only changes value in array
我是pdo的新手,所以我只需要更改的值或从html作为数组(Items [])发布的值,下面的代码更新发布的值并将未更改的值变为零。 请帮助并谢谢。
<?php
if(isset($_POST['update'])) {
for($t=0;$t<8;$t++){
if(isset($_POST['Items'])) {
$items=$_POST['Items'];
$update="UPDATE items SET Updater = :LogName,
UptoDate = :uptodate,
ItemPrice = :Items
WHERE id = $t";
$y=$t-1;
$stmt=$Link->prepare($update);
$stmt->bindParam(':Items',$items[$y], PDO::PARAM_STR);
$stmt->bindParam(':uptodate', $date, PDO::PARAM_STR);
$stmt->bindParam(':LogName', $LogName, PDO::PARAM_STR);
$stmt->execute();
} else {
// Don't do anything because it means there is no $_POST['Items(t)']
}
}
}
?>
......
</tr>
</table>
<input type="submit" name="update" value="تحديث"/>
</form>
将数据库中的当前数据加载到一个数组中(正确格式化),然后使用array_diff
获取数据库与表单数据之间的差异,因此您可以根据需要构建UPDATE
语句。
您还可以为未填写的字段指定默认值,因此当它们到达服务器时,您会知道哪些字段已更改(那些字段的值与默认值不同)。
尤里卡阿。 我解决了:
if(isset($_POST['update'])) {
$Items=$_POST['Items'];
for($t=0;$t<8;$t++){
if((!isset($Items[$t])) or ($Items[$t]==="") or ($Items[$t]===0))
{$t++;}
elseif(isset ($Items[$t])){
$y=$t+1;
$update="UPDATE items SET Updater = :LogName,
UptoDate = :uptodate,
ItemPrice = :Items
WHERE id = $y";
$stmt=$Link->prepare($update);
$stmt->bindParam(':Items',$Items[$t], PDO::PARAM_STR);
$stmt->bindParam(':uptodate', $date, PDO::PARAM_STR);
$stmt->bindParam(':LogName', $LogName, PDO::PARAM_STR);
$stmt->execute();
}}}
更新查询将仅更新需要更改的行。 您可以获取受影响的行( http://php.net/manual/en/pdostatement.rowcount.php ),该行将告诉您已更新了多少行。 除非您特别需要更改的值(在这种情况下,您需要首先选择它们),否则我相信代码将自动处理您需要的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.