简单的设置,疯狂的可能原因(对于像我这样的经验不足的程序员,至少):
使用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',所以它应该接受字符串,但是,嘿,我认为我知道这件事贯穿始终。
我猜这是一个初学者还不会有这种感觉的简单语法,但是我厌倦了无休止地调整语法而没有结果,或者结果会在以后使用时遇到麻烦以新的方式。
所以,希望你们能够和我一起工作!
答案 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);
}