繁体   English   中英

mysql在使用alter table时是否需要真正转义?

[英]Is it necessary to mysql real escape when using alter table?

前几天我注意到在使用 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吗? 由于查询唯一能做的就是添加列?

谢谢

要看。 如果您在查询中直接使用用户输入,则应该使用它。 如果不这样做,用户可以分隔查询并在其后抛出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并忽略末尾的注释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM