0

我尝试使用 PDO 语句更新我的数据库,直到我尝试使用变量作为 name 和 field 更新它之前,我没有遇到真正的问题。

    $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 ));

我怎样才能使这项工作?,有什么建议吗?

4

2 回答 2

3

你总是可以这样做:

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

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

丁斯

于 2013-05-02T21:58:01.443 回答
1

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

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

if (!in_array($real_function, array('top')) {
    return;
}
..."UPDATE twitter_control SET $real_function = ?..."
于 2013-05-02T22:00:26.520 回答