sql >> データベース >  >> RDS >> Mysql

SQLで構文エラーが発生しましたが、表示されません

    PHP Mysqliは、 multi_query()関数 を使用した複数のクエリを許可します。 。

    以下は、一般的な言葉で会話に追加し、無限の非同期からの悲しみを避けるためのものです マルチクエリのブロックを重ねて実行するとエラーが発生します。または、マルチの後に非マルチ。

    multi_query()の実行後に問題が発生します 結果セットをクリアせずに次のクエリに進む場合。エラーは、下部に注1として示されているエラーになります。ただし、この回答では避けています。

    あなたの特定の問題は\r\nとは何の関係もありませんでした または\n\r 。彼らはこの取り組みの一環としてテストされましたが、次の人が問題を抱えていることを混同しないように除外しました。

    <?php
        //mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        mysqli_report(MYSQLI_REPORT_ALL);
        error_reporting(E_ALL); // report all PHP errors
        ini_set("display_errors", 1); 
        echo "start<br/>";
    
        try {
            $mysqli= new mysqli('hostname', 'dbuser', 'pwd', 'dbname');
            if ($mysqli->connect_error) {
                die('Connect Error (' . $mysqli->connect_errno . ') '
                    . $mysqli->connect_error);
            }
            echo "I am connected and feel happy.<br/>";
            $query = "INSERT INTO `table1`(`thing`) values ('aaa')";
            $mysqli->query($query);
            // works fine
    
            // Note the concat below
            $query = "INSERT INTO `table1`(`thing`) values ('bbb1'); ";
            $query .=$query; // double it up with concat (in other words two insert)
            // we have a multi query so call it the right way:
            $mysqli->multi_query($query);
            // we need to clear the protocol to avoid Out of Sync errors
            // http://stackoverflow.com/a/21754463
            do { 
                $mysqli->use_result(); 
            }while( $mysqli->more_results() && $mysqli->next_result() );        
            // if you remark out the above 3 lines, 
            // expect error message depicted in **** Note1 ****
    
            // purpose of this next block is to show result sets are cleared
            // from prior multi, and we can do another insert
            // thus avoiding error 500 out of sync errors
            $query = "INSERT INTO `table1`(`thing`) values ('ccc')";
            $mysqli->query($query);   // a single insert statement
    
            // Finally, this shows that running a multi without a multi_query fcn call will bomb
            $query = "INSERT INTO `table1`(`thing`) values ('explosion'); \r\n";
            $query .=$query; // double it up with concat
            $mysqli->query($query);   // make a multi query explode by not calling multi_query (but rather query)
            //  The above line generated an error, error message below (**** Note2 ****)
            $mysqli->close();
        } catch (mysqli_sql_exception $e) { 
            throw $e; 
        }
    ?>
    

    データベースの結果:

    select * from table1;
    +----+-------+
    | id | thing |
    +----+-------+
    |  1 | aaa   |
    |  2 | bbb1  |
    |  3 | bbb1  |
    |  4 | ccc   |
    +----+-------+
    

    表示されているソースコードには、次のエラーメッセージが記載されています。最初のものは完全に回避されます。 2つ目はそうではなく、関数multi_query()であることを示しています。 、query()とは対照的に 、が必要です。

    ******注1******

    ******注2******



    1. Oracle Forms 6iは、パッチ19をインストールした後、起動時に0xC0000005でクラッシュします。

    2. psqlでポケットベルをカスタマイズする

    3. ORA-14551:クエリ内でDML操作を実行できません

    4. コンボボックスにmysqlデータを入力する