php没有正确创建mysql列


php not creating mysql column correctly

我正在尝试使用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));
}