好的,所以我将要更新的列存储在变量中,因此我需要将变量放在主查询中,我尝试这样做
$sqlltyryrt = "UPDATE user_items SET :fggdgdf = :fggdgdf +1 WHERE username=?";
$qqqqq = $db->prepare($sqlltyryrt);
$qqqqq->execute(array('fggdgdf'=>$fggdgdf),$_SESSION['username']);
我已经搜索了答案,并在网站上找到了一个线程执行相同的操作:
- Using a passed variable in a query using PDO (2011 年 10 月;作者 Don S)
最佳答案
$sqlltyryrt = "UPDATE user_items SET :fggdgdf = :fggdgdf +1 WHERE username=?";
$qqqqq = $db->prepare($sqlltyryrt);
$qqqqq->execute(array('fggdgdf'=>$fggdgdf),$_SESSION['username']);
您不能绑定(bind)列的名称;所以这是行不通的。无法对列或表名称使用绑定(bind)变量,因此唯一的方法是将变量实际插入到字符串中:
$sqlltyryrt = "UPDATE user_items SET $fggdgdf = $fggdgdf +1 WHERE username=?";
$qqqqq = $db->prepare($sqlltyryrt);
$qqqqq->execute(array($_SESSION['username']));
但是您需要非常确定您已经清理了变量,否则您可能会遭受 SQL 注入(inject)。您可以为此使用白名单,因为您应该能够生成可能的列名称的数组,并可以检查该数组中是否存在变量。
但是您尝试绑定(bind)注释名称的事实意味着您的数据库设计可能需要查看。
关于php - Pdo 使用查询内的变量进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18561044/