update query mysqli_query mysql_query ejemplo consulta php sql mysql

mysqli_query - PHP: múltiples consultas SQL en una declaración mysql_query



select php mysql consulta (4)

Hay un problema mayor aquí. Es posible que tenga declaraciones que se basan en otras declaraciones. No puedes simplemente ejecutarlos linealmente a ciegas.

Así que tengo un archivo de volcado de SQL que debe cargarse usando mysql_query (). Desafortunadamente, no es posible ejecutar múltiples consultas con él.

-> No se puede asumir que el cliente de línea de comandos mysql (mysql --help) está instalado - para cargar el archivo SQL directamente

-> No se puede asumir que la extensión mysqli está instalada

/* contents of dump.sql, including comments */ DELETE FROM t3 WHERE body = ''some text; with semicolons; scattered; throughout''; DELETE FROM t2 WHERE name = ''hello''; DELETE FROM t1 WHERE id = 1;

El explode () a continuación no funcionará porque algunos de los valores del contenido del volcado contienen punto y coma.

$sql = explode('';'', file_get_contents(''dump.sql'')); foreach ($sql as $key => $val) { mysql_query($val); }

¿Cuál es la mejor manera de cargar el SQL sin modificar el archivo de volcado?


La navaja de Occam ataca nuevamente.

La función de explosión anterior () no iba a funcionar porque hay puntos y comas en los valores. Sin embargo, lo que no me di cuenta (y menciono) es que los puntos y comas siempre preceden a las líneas nuevas en el archivo de volcado de SQL. Ay,

$sql = explode(";/n", file_get_contents(''dump.sql'')); foreach ($sql as $key => $val) { mysql_query($val); }

Además, gracias por tu ayuda, Bill.


<?php //STATIC QUERY $sql1 = " CREATE TABLE tblTable ( strOne VARCHAR(50) NOT NULL, strTwo VARCHAR(50) NOT NULL, strThree VARCHAR(50) NOT NULL ); INSERT INTO tblTable (strOne, strTwo, strThree) VALUES (''String 1'', ''String 2'', ''String 3''); UPDATE tblTable SET strOne = ''String One'', strTwo = ''String Two'' WHERE strThree = ''String 3''; "; //GET FROM FILE $sql2 = file_get_contents(''dump.sql''); $queries = preg_split("/;+(?=([^''|^///']*[''|///'][^''|^///']*[''|///'])*[^''|^///']*[^''|^///']$)/", $sql); foreach ($queries as $query){ if (strlen(trim($query)) > 0) mysql_query($query); } ?>


Tiene más casos problemáticos que solo punto y coma dentro de cadenas.

  • Script comandos integrados que mysql_query() no puede ejecutar, como USE .
  • Declaraciones que no terminan con un punto y coma, como DELIMITER .
  • Declaraciones que contienen punto y coma, pero no dentro de comillas, como CREATE PROCEDURE .

No sé de una manera fácil de manejar esta tarea, sin desembolsar al cliente de línea de comandos mysql. Me doy cuenta de que dijiste que no puedes confiar en que ese cliente esté presente, pero sin ese cliente, necesitas una gran cantidad de código PHP para analizar el script y ejecutar las declaraciones de manera apropiada.

Es posible que pueda encontrar dicho código dentro del producto phpMyAdmin . Sin embargo, ese producto está licenciado bajo la GPL, por lo tanto, si utiliza alguno de los códigos, también debe otorgar la licencia de su propio proyecto bajo la GPL.

Ver también mis respuestas a estas preguntas relacionadas: