我的$updatearray
包含各种数据($_POST
数据),需要更新MySQL数据库中表格中的行。
$updatearray
是一个关联数组。其中$ key是列名,$ value是需要覆盖旧数据的值。
例如:
array(2) {
["firstname"]=>
string(6) "Peter"
["lastname"]=>
string(6) "Griffin"
}
现在我正在寻找一种更新数据库的方法。我试着跟随:
foreach ($updatearray as $key => $value){
$edit = $db->query("UPDATE 'users' SET $key='$value' WHERE userid='1'");
if (!$edit) {
die('Invalid query: ' . mysqli_error());
}
}
我不知道是否有更好的方法可以解决这个问题。如果这个问题在我的方式可以解决的话。但这就是我在这里的原因。
提前致谢,
麦克
答案 0 :(得分:1)
您正在以正确的方式执行此操作,唯一错误的是您的SQL语法中存在错误。
请勿将您的表名放在引号中。
"UPDATE users SET $key='$value' WHERE userid='1'";
答案 1 :(得分:1)
以这种方式更新同一行的次数与要更新的列的次数相同。 您可以一次更新每一行,只将值分配给正确的set子句var
$set_clause ='';
foreach ($updatearray as $key => $value){
if ( $set_clause == '') {
$set_clause = " SET " ;
} else {
$set_clause = $set_clause . ' , ';
}
$set_clause = $set_clause . $key . " = '". $value . "' "
}
$edit = $db->query("UPDATE users " . $set_clause . " WHERE userid='1'");
if (!$edit) {
die('Invalid query: ' . mysqli_error());
}
仅当所有列都是字符串时才有效(因为您在引用中指定了值)。
另外,您使用了错误的标识符限定符作为表名。
行情和蜱是两种不同的动物。