$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
是列名。
此外,这可能存在安全隐患等问题,所以我想知道这是否是一个很好的方法。
答案 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'");
如果评级不是您的列名,请将其更改为确切的列名。 希望我帮忙。