在PHP中使用关联数组的mysql UPDATE语句

时间:2018-06-21 16:02:22

标签: php mysql associative-array

我已经阅读了本主题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也是模板语言;

谢谢。

1 个答案:

答案 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>