我正在尝试使用CodeIgniter
PHP框架在MySQL
中动态创建表
if($colname != ''){
$str = "CREATE TABLE IF NOT EXISTS $colname (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), site_id INT NOT NULL, name BLOB NOT NULL)ENGINE=INNOBD;";
$query = $this->db->query($str);
当我从MySQL
命令提示符执行该命令时,它完美地创建了表。然而,如果是通过CodeIgniter
完成的,我会得到以下错误:
<body>
<div id="container">
<h1>A Database Error Occurred</h1>
<p>Error Number: 1064</p><p>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 ''tc 11' (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), site_id INT NOT NULL, ' at line 1</p><p>CREATE TABLE IF NOT EXISTS 'tc 11' (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), site_id INT NOT NULL, name BLOB NOT NULL)ENGINE=INNOBD;</p>
这是怎么回事?感谢
您使用的是引号'
,而不是反引号``来包围表名。MySQL使用回溯标记来转义名称。
您应该更改中$colname
的值
'tc 11'
对此:
`tc 11`
你可以用
$colname = str_replace("'", "`", $colname);
其他证实这一点的资源:
- MySQL的列名中有空格
(很抱歉出现代码块;SO在内联代码中有反勾号问题)
这是因为您在$colname 中传递了一个不正确的值
首先,我假设$colname
应该是$tablename
,因为这是一个创建表的查询。
并且您的表名中似乎有一个空格,请显示$colname变量中的值。
应该没有空间,TC_11
try:
"CREATE TABLE IF NOT EXISTS `".str_replace(' ','',$colname)."` (id...
sql查询中存在错误。下面的代码应该完成这项工作,同时也使它更安全。
if(!empty($colname))
{
$sql = "CREATE TABLE IF NOT EXISTS ? (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), site_id INT NOT NULL, name BLOB NOT NULL)ENGINE=INNOBD;";
$query = $this->db->query($sql,array($colname));
}