1

前几天我注意到在使用带有 ALTER TABLE 的 PDO 时我无法绑定变量,例如以下示例将不起作用,

$q = $dbc -> prepare("ALTER TABLE emblems ADD ? TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', ADD ? DATETIME NOT NULL"); 
$q -> execute(array($emblemDB, $emblemDB . 'Date')); 

那么是否有必要使用 mysql_real_escape 字符串并像下面那样做,

// ESCAPE NAME FOR MYSQL INSERTION
$emblemDB = mysql_real_escape_string($emblemDB);
// INSERT EMBLEM DETAILS INTO DATABASE
$q = $dbc -> prepare("ALTER TABLE emblems ADD " . $emblemDB . " TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', ADD " . $emblemDB . "Date DATETIME NOT NULL");
$q -> execute();

还是我不需要添加mysql_real_escape_string?查询唯一能做的就是添加列?

谢谢

4

1 回答 1

1

要看。如果您在查询中直接使用用户输入,则应该使用它。如果不这样做,用户可以对查询进行定界并DROP在其后抛出一条语句。

当用户输入:

somekindofname TINYINT(1) UNSIGNED NOT NULL DEFAULT '0'; DROP TABLE emblems --

您的查询将变为:

ALTER TABLE emblems ADD somekindofname TINYINT(1) UNSIGNED NOT NULL DEFAULT '0'; DROP TABLE emblems -- TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', ADD TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' somekindofname; DROP TABLE emblems -- Date DATETIME NOT NULL

您的数据库将执行ALTER TABLE, 执行DROP TABLE并忽略最后的注释。

于 2012-04-05T11:25:47.113 回答