0

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

使用 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"; 像上面一样),它就不会更新。

我检查了数据库的结构,它被设置为'varchar',所以它应该接受字符串,但是,嘿,我是谁,我认为我完全知道这件事。

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

所以在这里希望你们伟大的人能和我一起解决这个问题!

4

3 回答 3

0

尝试转义变量:

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

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

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

于 2013-08-30T20:35:13.560 回答
0

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

mysql_query("UPDATE $table SET $column='$value' WHERE id=$userID", $con);
于 2013-08-30T20:47:22.853 回答
0

我发现了,感谢弗拉德。

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

我希望 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);
}
于 2013-08-31T15:09:38.177 回答