【问题标题】:MySQL UPDATE only updates integers, not stringsMySQL UPDATE 只更新整数,不更新字符串
【发布时间】:2013-08-30 20:29:12
【问题描述】:

简单的设置,疯狂的可能原因(至少对于像我这样没有经验的程序员来说):

用我定义的 JS,然后调用:

function dbUpdate(x, y, z) {
    $.ajax({
        url: 'php/dbUpdate.php',
        type: 'post',
        data: {table: x, column: y, value: z},
        success: function(html) {
        }
    });
}

dbUpdate("userbase", "currentLanguage", "en");

使用 php/dbUpdate.php,这些数据被捕获并处理到 UPDATE 查询中,该查询已经工作了一百万次:

$userID = 0;

$table = ($_POST['table']);
$column = ($_POST['column']);
$value = ($_POST['value']);

mysql_query("UPDATE $table SET $column=$value WHERE id=$userID", $con);
// assume $con is defined

问题:当 dbUpdate 的 'z' 参数是一个整数(例如,var z = 70;)时,没有问题。但是当它是一个简单的字符串时(例如,var z = "en"; 像上面一样),它就不会更新。

我已经检查了 db 的结构,它被设置为 'varchar',所以它应该接受字符串,但是,嘿,我是谁,我认为我对这件事了如指掌。

我猜这是一个初学者还没有感觉的简单语法,但我厌倦了无休止地调整语法而没有结果,或者结果在使用时会遇到麻烦以新的方式。

希望各位大佬能和我一起解决这个问题!

【问题讨论】:

  • 除非你打算在你的回调函数中使用html,因为你没有回调使用,你可以删除它。
  • mysql_query("UPDATE $table SET $column="$value" WHERE id=$userID", $con);
  • 如果你使用它,你会得到一个语法错误,因为你没有正确连接你的变量。请看我的回答

标签: javascript mysql ajax string integer


【解决方案1】:

尝试转义变量:

mysql_query("UPDATE $table SET '".$column."'='".$value."' WHERE id='".$userID.'", $con);

也请停止使用mysql_* 函数,您的代码很容易被破解(您没有清理您的$_POST 值)。尽快开始使用mysqli_*PDO,因为您使用的是已弃用的代码。

基本上,您允许对服务器进行原始输入(可以通过禁用 javascript 来规避客户端检查),这非常糟糕。

【讨论】:

  • 马上去试试这个,伙计,在此先感谢。清理我的 $_POST 值是什么意思?谢谢大家的建议!
  • 这是一个不推荐使用的方法:但在这种情况下使用mysql_real_escape_string($_POST['whatever']); (它会是mysqli_real_escape_string() 更好的方法,但你必须重写你的整个代码才能做到这一点
【解决方案2】:

假设你的 id 是一个 INT,你只需要引用你的值。

mysql_query("UPDATE $table SET $column='$value' WHERE id=$userID", $con);

【讨论】:

  • id 确实是一个 INT,但是要记住 $value 必须可以是字符串和整数,这样的引用不会对整数造成问题吗?
  • 如果列是 int 类型,MySQL 会将 '1' 解释为 1。
  • 虽然声明有效。正如@Victor 提到的,我不建议在生产中使用它。这根本不安全。
【解决方案3】:

感谢弗拉德,我发现了。

但供具有相同目标的人参考:

我希望 dbUpdate.php 能够同时处理字符串和整数,所以我接受了 Vlad 的建议并写道:

$userID = 0;

$table = ($_POST['table']);
$column = ($_POST['column']);
$value = ($_POST['value']);

if (is_string($value)) {
    mysql_query("UPDATE $table SET $column='$value' WHERE id=$userID", $con);
}
else {
    mysql_query("UPDATE $table SET $column=$value WHERE id=$userID", $con);
}

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 2011-07-31
    • 2011-04-07
    • 2015-08-20
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多