PDO语句,其中表和字段名称是变量

时间:2013-05-02 21:53:04

标签: php mysql pdo

我尝试使用PDO语句更新我的数据库,在尝试使用变量作为名称和字段进行更新之前,我没有遇到任何实际问题。

    $real_function = 'top' ;
    $value = 99 ;
    $tableName = "twitter_control" ;

    $stmt = $pdo->prepare("UPDATE ? SET ?=? WHERE id='control' ");
    $stmt->execute(array( $tableName, $real_function, $value ));

如果我使用此代码,则所有工作都按预期工作

  $stmt = $pdo->prepare("UPDATE twitter_control SET top=? WHERE id='control' ");
  $stmt->execute(array( $value ));

我该如何使这项工作? ,有什么建议吗?

2 个答案:

答案 0 :(得分:3)

你总能做到:

$stmt = $pdo->prepare("UPDATE {$tableName} SET {$real_function}=? WHERE id='control' ");

在准备声明中让它发挥作用。据我所知,你只能将值绑定到你的执行输入参数或bindParam函数..如果有人可以纠正我,否则..

DINS

答案 1 :(得分:1)

当您传递参数以执行它时,它会在转义时将值视为字符串,并将其包装在引号中。这导致UPDATE 'twitter_control' SET 'top' = '99',这是无效的。

您可能应该提前知道表和列的名称。如果它们必须是变量,则应在查询中插入值之前创建值的白名单。

if (!in_array($real_function, array('top')) {
    return;
}
..."UPDATE twitter_control SET $real_function = ?..."