php - mysqli_use_result - ¿Qué hace mysqli_store_result() en realidad?
mysqli_result (2)
En realidad, obtendrá el conjunto completo de resultados de MySQL. Puede entonces mysqli_data_seek () moverse a una fila particular dentro del conjunto. Eso significa que todos los resultados se almacenarán en el lado php después de la primera llamada, y las llamadas posteriores solo solicitarán los resultados de php
Quiero entender que lo que mysqli_store_result
realmente hace? Cuando visité el Manual PHP de mysqli_store_result
, encontré la definición
mysqli_store_result — Transfers a result set from the last query
La pregunta es ¿Dónde transfiere el conjunto de resultados? En realidad, recibí el error "Commands out of sync; you can''t run this command now"
después de ejecutar mysqli_multi_query
pero cuando utilicé el siguiente método, el error desapareció.
mysqli_multi_query($connection,$query);
do
{
mysqli_store_result($connection);
}
while(mysqli_next_result($connection));
Ahora, ¿Debería usar este mysqli_store_result($connection)
y mysqli_next_result($connection)
después de cada mysqli_query
o justo después de mysqli_multi_query
porque he leído en PHP Manaul que
"Aunque siempre es una buena práctica liberar la memoria utilizada por el resultado de una consulta que usa la función mysqli_free_result (), cuando se transfieren grandes conjuntos de resultados usando mysqli_store_result (), esto se vuelve particularmente importante".
Fuente: PHP: mysqli_store_result
Surge una pregunta más cuando mysqli_multi_query($connection,$query);
mencionado mysqli_multi_query($connection,$query);
Puse una declaración echo ''storing result <br />''
como abajo
do
{
echo ''storing result <br />
mysqli_store_result($connection);
}
while(mysqli_next_result($connection));
Aunque solo hubo dos consultas INSERT en la consulta $ pero dio la siguiente salida
storing result
storing result
storing result
storing result
Significa que hubo cuatro conjuntos de resultados que se transfirieron. No puedo entender esta situación. Una última pregunta. ¿Lo mencionado anteriormente do while
proceso afectará el rendimiento?
Los comentarios anteriores han declarado que mysqli_store_result no se debe usar con las instrucciones INSERT, pero nadie ha mencionado la función apropiada real: mysqli_affected_rows (). Si su extracto devuelve un conjunto de registros y desea verificarlo numéricamente, utilice mysqli_num_rows ().
Si se trata de una mezcla, esto podría ayudarlo a comenzar:
$queries[]="INSERT INTO TestTable (Column1) VALUES (''TEST1'')";
$queries[]="SELECT * FROM TestTable WHERE Column1 LIKE ''TEST%''";
$queries[]="INSERT INTO TestTable (Column1) VALUES (''TEST2'')";
$queries[]="SELECT * FROM TestTable WHERE Column1 LIKE ''TEST%''";
$queries[]="DELETE FROM TestTable WHERE Column1 LIKE ''TEST%''";
if(mysqli_multi_query($con,implode('';'', $queries))){
do{
if($result=mysqli_store_result($con)){
echo "Selected rows = ".mysqli_num_rows($result)."<br><br>";
mysqli_free_result($result);
}else{
$cumulative_rows+=$aff_rows=mysqli_affected_rows($con);
echo "Current Query''s Affected Rows = $aff_rows, Cumulative Rows = $cumulative_rows<br><br>";
}
} while(mysqli_more_results($con) && mysqli_next_result($con));
}
Productos:
Filas afectadas de la consulta actual = 1, Filas afectadas acumuladas = 1
Filas seleccionadas = 1
Filas afectadas de la consulta actual = 1, Filas afectadas acumuladas = 2
Filas seleccionadas = 2
Filas afectadas de la consulta actual = 2, Filas afectadas acumuladas = 4