Mysql在php中使用json_encode更新查询问题


Mysql Update query issue using json_encode in php

当我使用php-mysql更新数据时,遇到了一些问题,我的代码php代码在这里

$query = "UPDATE `wp_experience` SET 
                     `exp_from` ='". $exp_from."' ,
                     `exp_to` = '". $exp_to."' ,
                     `exp_title` = '". json_encode($exp_title)."',
                     `exp_desc` = '". json_encode($exp_desc)."' ,                               
                     `exp_cat` = '". $exp_cat."'                                
                     WHERE `id` =".$oldid;

它将产生类似的数据

更新wp_experience SET exp_from='2016-01-22 00:00:00',exp_to='2002-11-14 00:00:00`,exp_title='{"en":"PSA标致雪铁龙汽车,穆尔豪斯(F-68)","fr":"技术总监-法国","de":"负责维护的单位"}',exp_desc='{"en":"测试<p> ","fr":"测试<p> ","de":"H<p> "}',exp_cat='18',其中id=28

我有这个问题,

1064-您的SQL语法出现错误;查看与MySQL服务器版本相对应的手册,了解在"维护单元"附近使用的正确语法,exp_desc="{"en":";测试<p>"fr":"测试<第1行处的p'

如何解决此问题??

一些嵌入的字符串会破坏查询,因此可以使用mysqli_real_escape_string()或准备好的SQL语句:

$query = "
    UPDATE 
        wp_experience 
    SET 
        exp_from    = '" . $exp_from . "' ,  
        exp_to      = '" . $exp_to . "' , 
        exp_title   = '" . mysqli_real_escape_string($con, json_encode($exp_title)) . "',  
        exp_desc    = '" . mysqli_real_escape_string($con, json_encode($exp_desc)) . "' ,
        exp_cat     = '" . mysqli_real_escape_string($con, $exp_cat) . "'
    WHERE 
        id = " . $oldid;