我尝试使用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 ));
我该如何使这项工作? ,有什么建议吗?
答案 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 = ?..."