php - Pdo 使用查询内的变量进行更新

标签 php mysql pdo

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

$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('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/

相关文章:

php - stream_socket_accept()失败时如何查找错误代码/原因

php - 使用另一个文件中的 LESS 类 [Symfony2]

php - 将 .htaccess 重定向到 ssl 不起作用

php - MySQL中计算两个日期之间的差异(字符串格式)

PHP PDO 函数 lastInsertId 和竞争条件

javascript - 在父子关系中打印数组

MySQL CASE 逆向工作

php - 脚本向 php 中的注册用户发送自动生日祝福时出错

php - 登录 session 当前日期

mysql - 当创建脚本中包含 AUTO_INCRMENT 时,PDO 查询无法执行,但查询似乎有效