【问题标题】:Update query failing using JSON使用 JSON 更新查询失败
【发布时间】:2014-12-13 01:53:25
【问题描述】:

我正在尝试更新mysql 表并将json 数组插入一列(当前包含一个json 数组)。

这是我要运行的内容:

$array = ['key1' => 'val1', 'key2' => 'val2'];
$array = json_encode($array);
// ...some time later:
$mysqli->query("UPDATE table_name SET colname={$array} WHERE somecol=someval");

当我使用 INSERT 时,这种结构可以正常工作。关于为什么这不适用于 UPDATE/SET 的任何想法?

【问题讨论】:

  • 您是否在转义/引用 JSON 值? (无论如何都要阅读准备好的语句。然后切换到 PDO)。询问 $mysqli->error else.

标签: php mysql json mysqli


【解决方案1】:

当它到达数据库时,SQL 可能会出错。 而且你使用它的方式违背了使用 mysqli 的目的。

生成的查询如下所示:

UPDATE table_name SET colname={"key1": "val1", "key2": "val2"} WHERE somecol=someval

由于缺少单引号,插入不起作用。

推荐的方法如下:

注意:

  • 按预期使用方式使用 PDO(推荐)或 MySQLi。
  • 您必须自己进行错误检查和填充

示例:

$sql = 'UPDATE table_name SET colname=? WHERE somecol=someval';
$stmt = $mysqli->prepare($sql);

$stmt->bind_param('s', $someValue);
$stmt->execute();

【讨论】:

  • Touch 我非常喜欢你的回答,所以我做了一些编辑。希望你不要介意
  • 为了提出问题,我简化了我正在采取的实际行动——我使用的是准备好的陈述;我遇到的问题是由于我处理将参数类型数组与参数值数组合并的方式。将您的答案标记为正确,因为这涉及到一些重要说明,供遇到我发布的问题的人使用。反响很好!
【解决方案2】:

这个colname列,看看是不是一个字符串这样使用:

  $mysqli->query("UPDATE table_name SET colname='{$array}' WHERE somecol='someval'");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多