MySQL UPDATE只更新整数,而不是字符串

时间:2013-08-30 20:29:13

标签: javascript mysql ajax string integer

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

使用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',所以它应该接受字符串,但是,嘿,我认为我知道这件事贯穿始终。

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

所以,希望你们能够和我一起工作!

3 个答案:

答案 0 :(得分:0)

尝试转义变量:

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

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

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

答案 1 :(得分:0)

假设您的ID是INT,您只需引用您的值。

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

答案 2 :(得分:0)

我发现了,感谢弗拉德。

但是为了将来参考具有相同目标的人:

我希望dbUpdate.php能够处理BOTH字符串和整数,所以我接受了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);
}