2009-09-23 5 views
0

Possible en double:
execute sql query from sql fileExécuter la requête SQL à partir d'une chaîne en utilisant php

j'ai un fichier nommé file.sql qui est exporté à partir d'une base de données 'bureau'. Je veux importer cette vieille base de données à ma nouvelle base de données «ordinateur portable» en utilisant des scripts PHP. J'ai ouvert le fichier.sql en utilisant fopen et lu tout le contenu en utilisant fread et le contenu entier stocké dans une chaîne nommée $ sqldata. comment puis-je exécuter une requête entière à partir de cette variable ??

+0

avez-vous essayé de charger le fichier à partir de MySQL? – Steven

+2

OMG: Pouvez-vous revenir à la question que vous avez posée et clarifier ce que vous vouliez dire, ou accepter une réponse, au lieu de poser la même question encore et encore? – Graviton

+1

Dupe de http://stackoverflow.com/questions/1463987/execute-sql-query-from-sql-file – Graviton

Répondre

0

Dans ce genre de situation, je préfère utiliser l'utilitaire de ligne de commande mysql pour importer la sauvegarde dans son ensemble.

Par exemple, quelque chose comme cela devrait faire:

mysql --user=YOUR_LOGIN --password=YOUR_PASSWORD --host=localhost YOUR_NEW_DATABASE_NAME < your_dump.sql 

Si vous ne disposez pas d'un accès en ligne de commande à votre serveur, vous pouvez peut-être exécuter ce avec exec/shell_exec/...


Si vous ne pouvez vraiment pas utiliser la commande mysql à partir de la ligne de commande (ni en utilisant exec ou tout autre équivalent), peut-être que vous pouvez essayer d'utiliser mysqli_multi_query; comme indiqué dans le manuel:

un ou plusieurs Exécute requêtes qui sont concaténées par un point-virgule.

Compte tenu de votre décharge prbably ne contient plusieurs requêtes, séparées par des points-virgules, cela pourrait effectivement travailler ...


Edit: comme d'autres personnes ont fait remarquer, qu'en lisant les réponses qui ont été donné à vos autres questions? Par exemple, il y a des choses intéressantes ici: execute sql query from sql file

S'il y a quelque chose que vous ne comprenez pas dans ces réponses, vous pouvez leur envoyer des commentaires, pour obtenir, avec plus de précision, plus de précisions.

0

Vous devez diviser la chaîne qui contient effectivement plusieurs requêtes dans une liste de requêtes simples (ce qui n'est pas aussi simple que de diviser par ';') et les exécuter séparément ou vous pouvez simplement utiliser le MySQL Improved Extension qui est, autant que je savoir, la seule extension PHP MySQL supportant nativement plusieurs requêtes qui sont concaténées par un point-virgule par sa méthode/fonction mysqli::multi_query()/mysqli_multi_query(). Par ailleurs - l'utilisation du client en ligne de commande MySQL sera la meilleure solution à ce problème comme suggéré par Pascal MARTIN.

0

Il se peut que je manque quelque chose, mais il n'y a pas de fonction unique pour une telle requête batch en PHP. Donc, autre que d'utiliser l'utilitaire de ligne de commande mysql, vous devrez diviser file.sql en instructions séparées et les exécuter une après l'autre. La façon la plus simple de le faire pourrait être d'utiliser preg_split, bien que je voudrais souligner que cela pourrait échouer dans certaines circonstances.

Mise à jour: Ok, comme je viens d'apprendre de la réponse de S. Gehrig, il est une telle fonction en PHP.

0

Quelqu'un a juste demandé un similar question

Et ma réponse est la même:


<?php 
$link = mysqli_connect("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$query = file_get_contents("file.sql"); 

/* execute multi query */ 
if (mysqli_multi_query($link, $query)) 
    echo "Success"; 
else ehco "Fail"; 
?> 

Ceci parce que mysqli peut accepter plusieurs chaînes de requête en utilisant la fonction 'mysqli_multi_query'.

Espérons que cela aide.

+1

Pas seulement quelqu'un, le même. – outis

+0

Oui, c'est vrai. :-RÉ – NawaMan

0

MySQL GUI Tools ressemble à ce dont vous avez besoin. En utilisant l'administrateur, vous pouvez sauvegarder et restaurer des bases de données. J'ai suggéré cela depuis votre déplacement de votre base de données vers votre ordinateur portable.

Questions connexes