在PDO语句中动态更改列名称

时间:2013-06-02 16:57:54

标签: php mysql pdo prepared-statement

是否可以在准备好的MySQL语句中将列名作为参数传递?请看以下示例:

UPDATE Images
SET :placement = :imageURL
WHERE ID = :titleID;

PDO在每个参数周围添加',因此上面的中间行变为:

SET 'Homepage' = '1.jpg'

哪个MySQL不喜欢。有没有办法在PDO语句中包含字段名的参数并让它们被接受?

否则我想我将不得不写几个不同的PDO语句,具体取决于所选择的内容(?)。

2 个答案:

答案 0 :(得分:8)

你需要做这样的事情:

$column = 'someColumn';

$stmt = $db->prepare("UPDATE tableName SET {$column} = :columnValue WHERE ID = :recordId");

参数化占位符仅适用于值。

我建议你阅读你的问题上发表的评论@YourCommonSense。

答案 1 :(得分:0)

在这种情况下,我使用不同类型的替换参数,如下所示:

$unitLabel = 'store_number';
$sql = 'select * from users where [unitLabel] = :unit and level = :level;';
$sql = str_replace('[unitLabel]', $unitLabel, $sql);
$params = array(
  ':unit' => 300,
  ':level' => 'admin',
);
$stmt = $dbh->prepare($sql);
$stmt->execute($params);

准备好的SQL查询最终会被处理(或多或少):

SELECT * FROM USERS WHERE store_number = 300 AND level = 'admin';

哪种适用于我的情况。我希望这有帮助。 :)