SQLテーブルの作成とデータの挿入を同時に行うことは可能ですか?

Nov 28 2020

作成テーブルを削除すると機能しますが、コードでこれを行うことは可能ですか?

これがコードです

    $sql = "CREATE TABLE student ( student_id INT, name VARCHAR(20), major VARCHAR(20), PRIMARY KEY(student_id) ) INSERT INTO student VALUE(1, 'Jack', 'biology')"; if ($connect -> query($sql) === TRUE) { echo "New Table Created! <br><br>"; } else { echo "Error : " . $sql . " <br><br>" . $connect -> error . "<br><br>";
    }
    
    echo "Connected Successfully!";

作成テーブルを削除しなかった場合のエラーは次のとおりです

エラー:CREATE TABLE Student(student_id INT、name VARCHAR(20)、major VARCHAR(20)、PRIMARY KEY(student_id)); INSERT INTO student VALUE(2、 'kate'、 'sociology')

SQL構文にエラーがあります。8行目の「INSERTINTOStudent VALUE(2、 'kate'、 'sociology')」の近くで使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを確認してください。

回答

2 JM7 Nov 28 2020 at 10:22

コードに2つのタイプミスがあります。

  • 「;」がありません CREATEステートメントとINSERTステートメントの間。

  • INSERTステートメントはVALUEではなくVALUESを使用します。

     $sql = "CREATE TABLE student (
         student_id INT,
         name VARCHAR(20),
         major VARCHAR(20),
         PRIMARY KEY(student_id)
     );
    
     INSERT INTO student VALUES (1, 'Jack', 'biology')";
    

それとは別に、最初のドキュメントで述べたように、mysqliMultipleステートメントとmysqli_multi_query()の公式ドキュメントを確認してください。

API関数mysqli_query()およびmysqli_real_query()は、サーバーでマルチクエリをアクティブ化するために必要な接続フラグを設定しません。偶発的なSQLインジェクション攻撃の可能性を減らすために、複数のステートメントに追加のAPI呼び出しが使用されます。

または、コードを変更して、各クエリを個別に実行することもできます。