3

PHPフレームワークMySQLを使用して、でテーブルを動的に作成しようとしています:CodeIgniter

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);

これを確認するその他のリソース:

(コード ブロックについては申し訳ありません。SO にはインライン コード内のバッククォートに関する問題があります)

于 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 に答える