前几天我注意到在将PDO与ALTER TABLE一起使用时无法绑定变量,例如以下示例不起作用,
$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
?因为查询可以做的唯一事情就是ADD列?
由于
答案 0 :(得分: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
并忽略最后的评论。