前几天我注意到在使用 PDO 和 ALTER TABLE 时我无法绑定(bind)变量,例如以下示例将不起作用,
$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 string 并像下面那样做吗,
// 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
吗?由于查询唯一能做的就是添加列?
谢谢
最佳答案
视情况而定。如果您在查询中直接使用用户输入,则应该使用它。如果不这样做,用户可以分隔查询并在其后抛出 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
并忽略末尾的注释。
关于php - 使用alter table时是否需要mysql real escape?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10027528/