0

好的,所以我将要更新的列存储在变量中,因此我需要将变量放在主查询中,我尝试这样做

$sqlltyryrt = "UPDATE user_items SET :fggdgdf = :fggdgdf +1 WHERE username=?";
    $qqqqq = $db->prepare($sqlltyryrt);
$qqqqq->execute(array('fggdgdf'=>$fggdgdf),$_SESSION['username']);

我已经搜索了答案,并在网站上找到了一个相同的线程:

4

1 回答 1

1
$sqlltyryrt = "UPDATE user_items SET :fggdgdf = :fggdgdf +1 WHERE username=?";
$qqqqq = $db->prepare($sqlltyryrt);
$qqqqq->execute(array('fggdgdf'=>$fggdgdf),$_SESSION['username']);

不能绑定列名;所以这行不通。无法为列名或表名使用绑定变量,因此唯一的方法是将变量实际插入到字符串中:

$sqlltyryrt = "UPDATE user_items SET $fggdgdf = $fggdgdf +1 WHERE username=?";
$qqqqq = $db->prepare($sqlltyryrt);
$qqqqq->execute(array($_SESSION['username']));

但是你需要非常确定你已经清理了变量,否则你对 SQL 注入持开放态度。您可以为此使用白名单,因为您应该能够生成一个可能的列名数组,并可以检查该数组中是否存在变量。

但是您尝试绑定注释名称的事实意味着您的数据库设计可以与查看有关。

于 2013-09-01T17:39:26.093 回答