【问题标题】:MYSQL PHP - You have an error in your SQL syntaxMYSQL PHP - 您的 SQL 语法有错误
【发布时间】:2018-08-01 15:17:06
【问题描述】:

为什么我在尝试更新数据库中的 ga 字段时总是在 hostgator 中出现错误,在 textarea 中插入此代码时会发生错误

_gaq.push(['_setCustomVar',1, 'Status', 'Logged In']);
_gaq.push(['_trackEvent', 'Custom', 'PageLoad', 'Setting Logged In State',0,true]);

<textarea name="ga"></textarea>

$name = $_POST['name'];
$ga = trim($_POST['ga']);

$req = "UPDATE `con` SET `name` = '".$name."', `ga` = '".$ga."'");
if (mysqli_query($con, $req)) {
  echo "success"
}

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 '_setCustomVar',1, '状态', '登录']); _gaq.push(['_trackEvent', 'Custom', ' 在第 1 行

如果我删除 ga = '".$ga."' 我的数据库更新但如果添加此代码它会给出错误我有 hostgator 并且它在 localhost 中运行良好

数据库中的 ga 类型是文本。

【问题讨论】:

  • 你能回显 $req 并告诉我们字符串值是什么吗?
  • 您的代码容易受到SQL injection 攻击。您应该通过mysqliPDO 使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。
  • 再说一遍,RTM
  • 你不能“忘记sql注入”并在以后处理它......你当前的错误是由于没有数据清理,这也是防止SQL注入的方法。您必须修复 SQL 注入才能使您的错误消失。 (另外,就像其他人所说的那样,您的 UPDATE 需要一个 WHERE 子句,否则它将更新表中的每一行)
  • 您可能在本地主机上激活了 PHP 设置“magic_quotes_gpc”,这就是它在本地工作的原因。依赖此设置不是一个好习惯。 stackoverflow.com/questions/2610524/…

标签: php mysql


【解决方案1】:

Prepared statements 是解决此问题的一站式解决方案。您的代码应该是:

$name = trim($_POST['name']);
$ga = trim($_POST['ga']);
$some_value = 'some_value'; //This is just the imaginary value for demonstration

$req = "UPDATE `con` SET `name` = ?, `ga` = ? WHERE column_name = ?";
$stmt = $mysqli->prepare($req);
$stmt->bind_param('sss', $name, $ga, $some_value);
$stmt->execute();

您总是希望将WHEREUPDATE 查询一起使用。如果您不使用WHERE 子句,则更改将应用​​于所有记录。我想你知道 SQL 注入这种臭名昭著的攻击!

可用于解决您的代码问题的替代方法是mysqli_real_escape_string()。 例如,

$name = mysqli_real_escape_string($con, trim($_POST['name']));
$ga = mysqli_real_escape_string($con, trim($_POST['ga']));

但始终使用我上面显示的准备好的语句。

【讨论】:

    猜你喜欢
    • 2014-10-25
    • 2016-02-16
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    相关资源
    最近更新 更多