我已经阅读了本主题Constructing UPDATE statements using associative arrays in PHP,但是与我所需要的有所不同。
我有一张桌子t1
。
+--------------+----------------+----------------+------------+
| money | exp | uid | remark |
+--------------+----------------+----------------+------------+
| 9999 | 9999 | 1 | |
| 1234 | 567 | 2 | |
| 8887 | 88 | 3 | |
+--------------+----------------+----------------+------------+
我想创建一个名为function
的PHP jnupdateuser
来更新此表,例如:
jnupdateuser(array('money'=>10000,'exp'=>10000),1);
之后的数据将是这样:
+--------------+----------------+----------------+------------+
| money | exp | uid | remark |
+--------------+----------------+----------------+------------+
| 10000 | 10000 | 1 | |
| 1234 | 567 | 2 | |
| 8887 | 88 | 3 | |
+--------------+----------------+----------------+------------+
如果这样做:
jnupdateuser(array('remark'=>'None'),2);
比数据将是这样:
+--------------+----------------+----------------+------------+
| money | exp | uid | remark |
+--------------+----------------+----------------+------------+
| 9999 | 9999 | 1 | |
| 1234 | 567 | 2 | None |
| 8887 | 88 | 3 | |
+--------------+----------------+----------------+------------+
我的代码如下:
function jnupdateuser($jnparams = array(),$uids){
$conditionStrings = array();
foreach ($jnparams as $column => $value) {
//how to create this part to update my table? or maybe I was totally wrong?
}
return DB::query("UPDATE ".DB::table('game_jnmx_user')." SET ??? = ??? WHERE uid = $uids ");
}
DB::query
是我的模板语言,与mysqli_query
相同,DB::table
也是模板语言;
谢谢。
答案 0 :(得分:1)
尝试类似的事情:
function jnupdateuser ($jnparams = [], $uid)
{
if (empty($jnparams)) {
return true;
}
$conditions = [];
$uid = (int) $uid;
foreach ($jnparams as $column => $value) {
$conditions[] = "`{$column}` = '{$value}'";
}
$conditions = implode(',', $conditions);
return DB::query("UPDATE ".DB::table('game_jnmx_user')." SET {$conditions} WHERE uid = {$uid}");
}
它根据输入参数构建SET,我添加了一些验证。请注意,这里应该以某种方式转义或清理放入数据库的数据,因为它容易受到SQL注入的攻击。</ p>