2010-06-05 4 views
2

J'ai un certain ensemble de requêtes SQL qui est dans un fichier (c.-à-query.sql), et je veux exécuter ces requêtes dans des fichiers en utilisant PHP, le code que je l'ai écrit ne fonctionne pas,Comment faire pour exécuter un ensemble de requêtes SQL à partir d'un fichier, en PHP?

//database config's... 
$file_name="query.sql"; 
$query=file($file_name); 
$array_length=count($query); 
for($i=0;$i<$array_length;$i++) 
{ 
    $data .= $query[$i]; 
} 

echo $data;  
mysql_query($data); 

il renvoie la requête SQL du fichier mais renvoie une erreur à la fonction mysql_query() ...

+2

http://stackoverflow.com/questions/1883079/best-practice-import-mysql-file-in-php-split-queries – Wrikken

Répondre

2
  1. Ne pas utiliser file() sauf si vous voulez vraiment la ligne par ligne des données. file_get_contents() c'est mieux.
  2. $query==file($file_name); Je ne pense pas que vous voulez faire une comparaison ici.
  3. mysql_query n'exécutera jamais qu'une seule requête à la fois. Vous devrez trouver un moyen de séparer vos requêtes dans le fichier et les exécuter une par une.
+0

merci @ Matti Virkkunen ... –

1

Si vous vous ennuyez à lire la page de manuel mysql_query(), elle dit que cette fonction ne peut exécuter qu'une seule requête à la fois.
Donc, il faut le mettre à l'intérieur de la boucle

+0

lecture quelques commentaires aussi -> http://lv.php.net/manual/fr/fonction.mysql-query.php#91669 – Anpher

+0

ooh! ouais .. juste je viens d'oublier .... merci @ Col.Shrapnel pour montrer mon erreur ... –

2
Try this:  

// SQL File 
    $SQLFile = 'YourSQLFile.sql'; 

    // Server Name 
    $hostname = 'localhost'; 

    // User Name 
    $db_user = 'root'; 

    // User Password 
    $db_password = ''; 

    // DBName 
    $database_name = 'YourDBName'; 

    // Connect MySQL 
    $link = mysql_connect($hostname, $db_user, $db_password); 

    if (!$link) { 
    die("MySQL Connection error"); 
    } 

    // Select MySQL DB 
    mysql_select_db($database_name, $link) or die("Wrong MySQL Database"); 

    // Function For Run Multiple Query From .SQL File 
    function MultiQuery($sqlfile, $sqldelimiter = ';') { 
    set_time_limit(0); 

    if (is_file($sqlfile) === true) { 
    $sqlfile = fopen($sqlfile, 'r'); 

    if (is_resource($sqlfile) === true) { 
    $query = array(); 
    echo "<table cellspacing='3' cellpadding='3' border='0'>"; 

    while (feof($sqlfile) === false) { 
    $query[] = fgets($sqlfile); 

    if (preg_match('~' . preg_quote($sqldelimiter, '~') . '\s*$~iS', end($query)) === 1) { 
    $query = trim(implode('', $query)); 

    if (mysql_query($query) === false) { 
    echo '<tr><td>ERROR:</td><td> ' . $query . '</td></tr>'; 
    } else { 
    echo '<tr><td>SUCCESS:</td><td>' . $query . '</td></tr>'; 
    } 

    while (ob_get_level() &gt; 0) { 
    ob_end_flush(); 
    } 

    flush(); 
    } 

    if (is_string($query) === true) { 
    $query = array(); 
    } 
    } 
    echo "</table>"; 

    return fclose($sqlfile); 
    } 
    } 

    return false; 
    } 

    /* * * Use Function Like This: ** */ 

    MultiQuery($SQLFile); 
0

Ces types d'opérations sont effectuées habituellement sous forme de scripts shell. Pour d'autres lectures, les lectures suivantes seront utiles pour connaître le pour et le contre. Cependant, normalement, les opérations de type batch doivent être effectuées sous des scripts .sql, sinon l'exécution de .sql est fortement déconseillée.

Références:

Running MySQL *.sql files in PHP

http://php.net/manual/en/function.shell-exec.php

Questions connexes