2014-12-13 68 views
1

我试图更新mysql表并将json数组插入列(当前包含json数组)。使用JSON更新查询失败

这里就是我试图运行:当我使用INSERT

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

这同一种结构的正常工作。任何想法为什么这不与UPDATE/SET

+1

你逃逸/引用的JSON值? (无论如何请阅读准备好的语句,然后切换到PDO)。询问$ mysqli->其他错误。 – mario 2014-12-13 02:06:17

回答

3

的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(); 
+0

触摸我很喜欢你的答案,所以我编辑了一下。我希望你不要介意 – meda 2014-12-13 02:36:05

+0

@meda Nah。复制编辑的东西是最好的。谢谢 – Touch 2014-12-13 02:37:58

+0

我简化了为了提出问题而采取的实际行动 - 我正在使用准备好的声明;我遇到的问题是由于我处理将参数类型数组与参数值数组合并的方式。标明你的答案是正确的,因为这涉及到一些有关我发布的问题的人的重要笔记。伟大的回应! – Ben 2014-12-13 03:39:34

-1

这colname的列,看看它是否就像如果一个字符串中使用这样的:

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