2011-11-29 17 views
5

¿Cómo puedo obtener un archivo .sql, como el siguiente, a través de php?¿Origina un archivo MySQL a través de PHP?

CREATE DATABASE IF NOT EXISTS data_base; 
USE data_base; 
CREATE TABLE IF NOT EXISTS the_table( 
    package_name varchar(50) NOT NULL, 
    PRIMARY KEY (`package_name`) 
) 

He intentado lo siguiente, pero no funciona. Intenté investigar un poco y parece que necesito hacer algo llamado LOAD DATA INFILE, pero no lo entiendo.

mysql_query("source C:/xampp/htdocs/Project1/mysql/source.sql;") or die(mysql_error()); 

¿Cómo puedo obtener un archivo .sql usando PHP? Gracias.

Respuesta

4

No puede simplemente ejecutar una secuencia de comandos SQL, incluso con mysqli :: multi_query(). Un script SQL puede contener algunos comandos reconocidos como builtin commands solo por el cliente mysql, no por el analizador SQL del servidor MySQL.

SOURCE es definitivamente un comando que es preprocesado por el cliente mysql. El servidor no entiende ese comando. Por lo tanto, no puede ejecutar SOURCE en el servidor utilizando la API de consulta.

Si puede restringir el contenido de su script SQL para excluir comandos integrados del cliente mysql, podría funcionar el uso de mysqli :: multi_query(). Pero no funcionará para el conjunto completo de comandos que están permitidos en un script SQL.

Véase también mi respuesta a Running MySQL *.sql files in PHP

LOAD DATA INFILE no ejecuta las sentencias SQL para crear tablas, sólo se carga campos de un archivo de texto en una tabla existente.

2

Está mezclando declaraciones de línea de comandos mysql con llamadas funcionales PHP. Haz uno o el otro.

utilizar la CLI mysql (si está disponible):

// executing mysql cli 
exec("mysql < test.sql"); 

o ejecutar el SQL con mysqli_multi_query():

// running the files contents in bulk 
$sql= file_get_contents('test.sql'); 
mysqli_multi_query($sql); 

Nota: Este es un riesgo potencial para la seguridad. Ser aconsejado.

+0

excelente, gracias. ¿Por qué es un riesgo de seguridad? – user954912

+1

El archivo SQL podría ser malicioso (es decir, falso, generado por el usuario, etc.). Además, tenía un control de error limitado con una consulta múltiple. El punto es que debe ejecutarse en casos muy específicos y limitados. –

Cuestiones relacionadas