hellsing Creative Commons License 2016.02.03 0 0 1991

Üdv, segítség kéne php mysqli_multi_query kérdésben. Mitől lehet az, hogy ha átküldök 1000 insert vagy update utasítást, akkor az seperc alatt lefut, de ha ezt küldöm át:

 

TRUNCATE TABLE _test;

ALTER TABLE _test AUTO_INCREMENT=1;

INSERT _test SET dataField=1;

 

…akkor az eredmény: 2014 - Commands out of sync; you can't run this command now.

 

Ha csak egyféle utasításból küldök akármennyit, akkor az lefut, de ha keverem, akkor out of sync. Ha selectet küldök, akkor minden eredmény megjön, ergo store_result és free_result a helyén van. A hiba akkor sem jön elő, ha egymás után uttatok két multy_query-t: az egyikben 100 insert, a másikban pár update.

 

(Tudom, hogy nem sok értelme van egy táblába 100 külön isnertet küldeni egy mysqli_multi_queryvel. Még csak ismerkedek a multi query lehetőségeivel.)

 

Ez a tanulós php függvényem:

 

    function dbMultiQuery ( $dbConn , $sql , $key = false ) {
       
if ( is_array ( $sql ) ) {
           
foreach ( $sql as $q ) {
               
$query .= $q ;
           
}
           
$r = array ( ) ;
           
if ( MySQLi_multi_query ( $dbConn , $query ) ) {
               
do {
                   
if ( $result = MySQLi_store_result ( $dbConn ) ) {
                       
while ( $row = MySQLi_fetch_assoc ( $result ) ) {
                           
echo "row: " . $row . "<br />" ;
                           
if ( $key && array_key_exists ( $key , $row ) ) {
                               
$r [ $row [ $key ] ] = $row ;
                               
unset ( $r [ $row [ $key ] ] [ $key ] ) ;
                           
}
                           
else {
                               
$r [ ] = $row ;
                           
}
                           
MySQLi_free_result ( $result ) ;
                       
}
                   
}
                   
else {
                       
if ( MySQLi_errno ( $dbConn ) == 0 ) {
                           
return ( "success" ) ;
                       
}
                       
else {
                           
return (MySQLi_errno ( $dbConn ) . " - " . MySQLi_error ( $dbConn ) ) ;
                       
}
                    }
                   
if ( ! MySQLi_more_results ( $dbConn ) ) {
                       
break ;
                   
}
               
} while ( MySQLi_next_result ( $dbConn ) ) ;
               
return ( $r ) ;
           
}
           
else {
               
return ( MySQLi_errno ( $dbConn ) . " - " . MySQLi_error ( $dbConn ) ) ;
           
}
       
}
       
else {
           
return ( "failed" ) ;
       
}
   
}