Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL дава синтактична грешка, но аз не виждам такава

PHP Mysqli позволява множество заявки с функцията multi_query() .

Следното е да добавите към разговора общи думи и да избегнете скръбта от безкрайните Извън синхрон грешки, когато блокове от множество заявки се изпълняват един върху друг. Или не-множество след множество.

Проблемът започва след изпълнението на multi_query() ако след това се премине към следващата заявка, без да се изчисти наборът от резултати. Грешката ще бъде тази, обозначена като Note1 в долната част. Но се избягва в този отговор.

Конкретният ви проблем няма нищо общо с \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   |
+----+-------+

Следните съобщения за грешка са споменати в показания изходен код. Първото се избягва напълно. Вторият не е и там показва, че функцията multi_query() , за разлика от query() , е задължително.

****** Забележка 1 ******

****** Забележка 2 ******



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете тригер за изтриване на php myadmin

  2. Коя е най-добрата практика за съхраняване на персонализирани данни за Wordpress

  3. MySQL Резултати като списък, разделен със запетая

  4. как да извлека данни от три или повече таблици?

  5. MySQL/PDO съкращава данните