2012-04-05 56 views
1

我注意到,使用PDO与ALTER TABLE比如下面的例子将不工作的时候,我不能绑定变量的一天,当使用alter table时,是否有必要使用mysql真正的逃脱?

$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补充的吗?作为查询可以做的唯一事情是添加列?

谢谢

+0

是否'$ emblemDB'直接从用户输入来的呢? – alex 2012-04-05 11:16:54

+0

是的,它让我生气真的,因为我不能绑定的参数,我需要做很多这些类型的查询的! – cgwebprojects 2012-04-05 11:17:52

+0

根据用户输入添加列是否最好?我可以想出许多其他方法来实现我认为你正在尝试做的事情。 – alex 2012-04-05 11:20:27

回答

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而忽略在最后的注释。

+0

好的,谢谢这是我以后,我不相信PDO不支持它! – cgwebprojects 2012-04-05 11:27:41

相关问题