mysql - 在 SQL 查询中准备语句,同时在 PHP 中保存 JSON 数据
问题描述
我有简单的 php 代码来解析 JSON 文件中的一些数据并将它们保存到 mysql 数据库中。但它显示以下错误:
Parse error: syntax error, unexpected 'my_name' (T_STRING) in C:\xampp\htdocs\mycode.php on line 25
我的php代码如下:
$sql = "INSERT INTO table1 (my_name, hobby, other) VALUES ($row['my_name'], $row['hobby'], $row['other'])"; //line 25
mysqli_query ($conn, $sql);
为什么显示语法错误?查询中有什么问题吗?
解决方案
您需要将插值占位符括在花括号中,即$row['my_name']
-> {$row['my_name']}
:
$sql = "INSERT INTO table1 (my_name, hobby, other) VALUES ({$row['my_name']}, {$row['hobby']}, {$row['other']})";
这仅涉及 PHP 语法。您现在得到的 SQL 语法错误是下一个问题。“解决”这个问题的最简单方法是在占位符周围包含额外的撇号,即
$sql = "INSERT INTO table1 (my_name, hobby, other) VALUES ('{$row['my_name']}', '{$row['hobby']}', '{$row['other']}')";
但不要这样做,因为这段代码是典型的SQL 注入漏洞的示例。
考虑改用准备好的语句——这完全消除了 PHP 的字符串插值。
推荐阅读
- git - 如何正确地将错误直接修复到主分支?
- python - 如何用python打开一个mpp文件
- javascript - 让星星排列 CSS
- angular - 尽管在构造函数中设置并正确订阅了Angular Observable undefined(使用firebase)
- marklogic - 将 NodeJS 作为 SAML 连接到 MarkLogic 时出现 UTF-8 转义序列错误
- laravel - 在 Laravel 中加载 Xlsx 文件的数据
- android - 恢复在线状态后检索推送通知。Firebase/Onesignal
- sql - 计算时分区列是否有用
- sql - 通过 SQL 中的过滤器仅选择最大值
- python - 尝试从元组列表和元组创建数据框