基于PHP变量更新列值,该变量等于列名

时间:2015-06-13 08:44:03

标签: php mysql

$rating =  mysqli_real_escape_string($conn,$_POST['rating']);
$id = mysqli_real_escape_string($conn,$_POST['id']);
mysqli_query($conn,"UPDATE table SET $rating=$rating+1 WHERE id='$id'");

有没有办法根据PHP变量$rating更新列? $rating是列名。

此外,这可能存在安全隐患等问题,所以我想知道这是否是一个很好的方法。

2 个答案:

答案 0 :(得分:1)

是的,你可以在sql中使用变量名作为字段名。但是,在将其放入sql字符串之前,必须先对其进行验证。由于它不是一个字段值,你不能引用"引用"它

$rating =  $_POST['rating'];
// Define list of valid "rating" db field names here
$valid_fields = Array('rating_a', 'rating_b', 'rating_c');

if (in_array($rating, $valid_fields)) {
    $id = mysqli_real_escape_string($conn,$_POST['id']);
    mysqli_query($conn,"UPDATE table SET $rating=$rating+1 WHERE id='$id'");
}

答案 1 :(得分:0)

首先,你的sql不正确,因为我不认为变量可以是mysql中的列名。因此,请在mysql数据库中检查要更新的确切列。所以你的sql会像

$rating =  mysqli_real_escape_string($conn,$_POST['rating']) + 1;

$id = mysqli_real_escape_string($conn,$_POST['id']);
mysqli_query($conn,"UPDATE `table` SET `rating`=$rating WHERE id='$id'");

如果评级不是您的列名,请将其更改为确切的列名。 希望我帮忙。