Perl dbi准备是错误的报价

Kam*_*han 1 mysql perl dbi

我的代码类似于以下内容:

$sth = $dbh->prepare("CREATE TABLE IF NOT EXISTS ? (`id` bigint(100) unsigned NOT NULL AUTO_INCREMENT");
$sth->execute('test');
Run Code Online (Sandbox Code Playgroud)

我最终得到了错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test'
Run Code Online (Sandbox Code Playgroud)

从跟踪中我发现perl DBI在表名周围放了单引号,mysql不喜欢.如何告诉DBI不要放任何引号或放(`)而不是单引号?

ike*_*ami 5

这只是按照你的要求做的.给定一个字符串时,?相当于一个字符串文字.所以

SELECT * FROM Table WHERE field = ?
Run Code Online (Sandbox Code Playgroud)

手段

SELECT * FROM Table WHERE field = 'test'
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM ?
Run Code Online (Sandbox Code Playgroud)

手段

SELECT * FROM 'test'
Run Code Online (Sandbox Code Playgroud)

你需要使用

$dbh->prepare("
   CREATE TABLE IF NOT EXISTS ".( $dbh->quote_identifier('test') )." (
             `id` bigint(100) unsigned NOT NULL AUTO_INCREMENT
          )
");
Run Code Online (Sandbox Code Playgroud)