【问题标题】:When send encoded json to mysql reject将编码的 json 发送到 mysql 时拒绝
【发布时间】:2020-01-01 05:28:20
【问题描述】:

我正在构建一些新脚本,用于将带有空格的长文本添加到 MySQL。我需要使用编码从JSON 发送数组元素到MySQL 表。编码也工作正常。我的问题是当我尝试插入数据时MYSQL 是拒绝数据。

$day_details['description']=escape_string($_POST['description']);
$data_[]=$day_details;
$mysql_desc=json_encode($data_);

$sql="INSERT INTO 'table' 'description' VALUES ('".$mysql_desc."')";
if($conn->query($sql)){

}

语法错误

【问题讨论】:

  • 你需要mysqli_real_escape_string()(或等效的)json
  • 我使用 escape_string 函数中的 mysqli_real_escape_string。当我将空格放入显示错误的文本中时。
  • $sql="INSERT INTO table_name (description) VALUES .... 仔细阅读错误信息,它会告诉你错误在哪里
  • 无论是否转义描述,您都可能需要转义 $mysql_desc(实际上这就是您应该转义的全部内容)

标签: php mysql arrays json database


【解决方案1】:

你有几个问题:

  1. 表名和列名不应括在单引号中,如果需要,应使用反引号(请参阅this Q&A)。
  2. 列名应放在括号中。
  3. 最后,您需要在 转换为 JSON 之后对数据进行转义。但更好的是,使用准备好的查询,那么您根本不需要转义数据:
    $day_details['description']=$_POST['description'];
    $data_[]=$day_details;
    $mysql_desc=json_encode($data_);

    $sql="INSERT INTO `table` (`description`) VALUES (?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param('s', $mysql_desc);
    if($stmt->execute()){
        // do something
    }

【讨论】:

  • 我的情况是 \\r\\
  • @SasinduJayampathi 只要您使用准备好的语句,您就不应该在 JSON 中遇到特殊字符问题。请注意,您根本不需要调用您的escape_string 例程。
  • 让我试试看
  • 谢谢大家。这是解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 2015-06-06
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多