php - 使用alter table时是否需要mysql real escape?

标签 php mysql pdo

前几天我注意到在使用 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/

相关文章:

php - PHP套接字,以任何方式加快此速度

php - 连接到 postgres 时出错(pg_close)

php - 如何在 laravel 5.2 中获取两个表的数据

MySQL : how to change schema between 2 tables

mysql - 您可以浏览正在运行的 VoltDB 数据库吗?

PHP MySQL 将多个 fetchcolumn 组合成一个查询

php - 如何回显另一个表中的值?

PHP + MYSQL 页面 - OOP 和 PDO

php - 使用 Symfony 5 配置 Mercure

php - 检索最后插入的 iD,然后上传到 MySQL。 #PDO #PHP