我有一个数组,其中键代表我数据库中的每一列。现在我想要一个进行mysql更新查询的函数。像
这样的东西 $db['money'] = $money_input + $money_db;
$db['location'] = $location
$query = 'UPDATE tbl_user SET ';
for($x = 0; $x < count($db); $x++ ){
$query .= $db something ".=." $db something
}
$query .= "WHERE username=".$username." ";
答案 0 :(得分:3)
您想要foreach
:
$values = array();
foreach($db as $column => $value){
$values[] = $column . "='" . mysql_real_escape_string($value) . "'";
}
$query .= implode(',', $values);
但是这会将所有值设置为字符串(不确定MySQL是否进行自动转换),您可能希望首先使用is_numeric
进行测试:
if(!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
$values[] = $column . "=" . $value;
<强>更新强>
每当您在查询中设置 string 值时,都必须将它们放入引号中。因此你必须写:
$query .= "WHERE username='".$username."'";
(注意单引号)。
使用sprintf
可以使整个事情更加清晰。
答案 1 :(得分:0)
您可以使用array_keys提取数组元素的名称,然后只使用类似的内容......
$query .= $keys[$x] . '="' . mysql_real_escape_string($db[$keys[$x]]) .'" ';
...在for循环中。
(我推测存在......
$keys = array_keys($db);
...在上面定义了$ db值之后。)
那就是说,我真的不确定我会推荐这种“一刀切”的做法。
答案 2 :(得分:0)
类似于this:
function mysql_update_array($table, $data, $id_field, $id_value) {
foreach ($data as $field=>$value) {
$fields[] = sprintf("`%s` = '%s'", $field, mysql_real_escape_string($value));
}
$field_list = join(',', $fields);
$query = sprintf("UPDATE `%s` SET %s WHERE `%s` = %s", $table, $field_list, $id_field, intval($id_value));
return $query;
}
请注意,代码不是我的!
答案 3 :(得分:0)
foreach($array as $attr => $val)
$items[] = "$attr='$val'";
mysql_query("INSERT INTO table SET ".implode(',', $items));