3

我正在尝试MySQL使用CodeIgniterPHP 框架在 中动态创建表:

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>

这里发生了什么?谢谢

4

4 回答 4

2

您使用引号'而不是反引号 ` ` 来包围您的表名。MySQL 使用反引号来转义名称

您应该更改$colnamefrom的值

'tc 11'

对此:

`tc 11`

你可以这样做:

$colname = str_replace("'", "`", $colname);

其他证实这一点的资源:

(对代码块感到抱歉;所以在内联代码中存在反引号问题)

于 2012-07-23T22:47:24.950 回答
0

那是因为您在 $colname 中传递了不正确的值

首先我假设$colname应该是$tablename,因为这是一个创建表的查询。

并且您的表名中似乎有一个空格,请显示您的 $colname 变量中的值。

应该没有空间,TC_11

于 2012-07-23T22:47:18.310 回答
0

尝试:

"CREATE TABLE IF NOT EXISTS `".str_replace(' ','',$colname)."` (id...
于 2012-07-23T22:48:52.340 回答
0

您的 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));
}
于 2012-07-23T22:49:04.333 回答