-3

したがって、エラーが発生するコードのスニペットは次のとおりです。

$con = mysqli_connect('localhost', 'root', '', 'notesDB');

if(isset($_POST['tableName'])) {
    $tName = htmlentities($_POST['tableName']);

    $firstQuery = mysqli_query($con,"INSERT into notes(Title) VALUES( '$tName'); CREATE TABLE $tName(id int NOT NULL AUTO_INCREMENT, Title varchar(20) NOT NULL, Description varchar(100), PRIMARY KEY(id));");

    if($firstQuery){
        header("Location: create2.php");
    }
    else 
        echo mysqli_error($con);
}

これの出力は次のとおりです。

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 'CREATE TABLE test1(id int NOT NULL AUTO_INCREMENT, Title varchar(20) NOT NULL, D' at line 1

面白いことに、正確なコード (変数を除く - $ 記号を削除しただけ) は phpMyAdmin で完全に実行されました。

また、php に実際に問題がないことを証明するために、(CREATE クエリではなく) INSERT クエリのみの場合、クエリはエラーなしで実行されました。

4

3 に答える 3

3

mysqli_query一度に 1 つのクエリしか実行できません。

mysqli_multi_query代わりに試してください。

余談ですが、その場でテーブルを作成することは、通常、より大きな設計上の問題の兆候です。スキーマは比較的静的である必要がありますが、データは動的である必要があります。

于 2013-11-11T13:23:48.240 に答える
1

データベース アーキテクチャが間違っています。
その場でテーブルを作成しないでください。したがって、単純な通常の INSERT クエリを使用して新しいエンティティを登録するだけです。次に、このエンティティの ID を使用して、別の [既存の] テーブルからレコードをリンクします。

if(isset($_POST['tableName'])) {
    $stm = mysqli_prepare($con,"INSERT into notes(Title) VALUES(?)");
    $stm->bind_param("s",$_POST['tableName']);
    $stm->execute();
}
于 2013-11-11T13:24:22.717 に答える
1

コードで一度に 2 つの個別のクエリを実行しようとしていますが、そのようには実行できません。以下のように、それらを個別に実行する必要があります。

$con = mysqli_connect('localhost', 'root', '', 'notesDB');

if(isset($_POST['tableName'])) {
    $tName = htmlentities($_POST['tableName']);

    $firstQuery = mysqli_query($con,"INSERT into notes(Title) VALUES( '$tName')");

$secondQuery = mysqli_query("CREATE        TABLE '$tName' (id int NOT NULL AUTO_INCREMENT, Title varchar(20) NOT NULL, Description varchar(100), PRIMARY KEY(id));");

    if($firstQuery || $secondQuery){
        header("Location: create2.php");
    }
    else 
        echo mysqli_error($con);
}
于 2013-11-11T13:20:56.650 に答える