Requête d'insertion multi base - SQL/NoSQL - Programmation
Marsh Posté le 28-05-2013 à 15:41:35
Ben tu crées une connexion par serveur. Sinon, tu exécutes la requête sur le premier serveur, puis tu clos la connexion et t'en rouvres une autre sur le 2ème serveur. Je vois pas trop le pb
Marsh Posté le 28-05-2013 à 16:31:38
ça je peux le faire si je fais un truc du genre
Code :
|
La je fais une multitude de requête et il suffit d'un problème qqconque en php pour m'arrêter dans ma boucle (ici si id est un string => il t'attends. ba comment j'ai construit ma requête (sans mysql_real_escape_string) ba ça foire, je m'arrête au milieu de ma boucle et c'est la merde)
Je voudrai faire une seule requête d'où la demande (soucis de fiabilité du code + performance)
Marsh Posté le 28-05-2013 à 17:42:49
Tu pourras pas, à commencer par le fait que le sgbd va refuser d'exécuter plusieurs requêtes en une fois quand elles sont passées via PHP. En gros, si t'as 2 requêtes SQL séparées par un ; dans une chaîne que tu passes à mysql_query(), ben seule la première sera exécutée (question de sécurité et éviter des SQL injection entre autre, il me semble).
Edit : si ta BD est en InnoDB, tu peux utiliser le mode transactionnel pour qu'au moins, en cas d'erreur en cours de script, tu retrouves ta BD dans l'état initial
Marsh Posté le 28-05-2013 à 18:31:52
Je sais tout ça, hmmm je sais que mysql ne permet pas de faire ça (la base est en myISAM (non négociable)).
Pour préciser un peu mon cas =>
meme serveur apache, base1, base 2
deux utilisateur mysql, user1, user2
tous les privilège base1 => user1, base2 => user2
avec un utilisateur, je peux faire
select * from 'base1'.test t1 join 'base2'.test t2 on t1.id=t2.id
mais je voudrais faire la meme requete alors que je n'ai acces que aux utilisateurs 1 et 2
existe-t-il une solution? (sans modifier cette configuration)
Marsh Posté le 28-05-2013 à 19:30:50
C'est quoi ton besoin initial (besoin fonctionnel) ? Parce que la solution que t'essayes de mettre en oeuvre n'est peut-être pas la bonne (solution technique à base de php)...
Marsh Posté le 29-05-2013 à 09:45:15
Je passe par une interface web pour lancer une requête sql, je voudrais que mon serveur travaille uniquement sur le sql, je ne veux pas d'un traitement en php en parallèle.
Marsh Posté le 29-05-2013 à 09:47:59
Là, tu exprimes une nouvelle fois une solution technique. mais quel est le besoin fonctionnel, le but à atteindre ?
Marsh Posté le 29-05-2013 à 10:11:19
c'est possible : http://stackoverflow.com/questions [...] lect-query
pas trivial , mais possible
( le besoin fonctionnel est visiblememnt d'archiver dans uen base sur un autre serveur ce qui se passe ici )
Marsh Posté le 29-05-2013 à 12:04:12
Je pensais aussi qu'il s'agissait d'une opération d'archivage, mais plutôt que des suppositions, je préférais qu'il le confirme lui-même.
En tout cas, j'aurais appris l'utilité du moteur FEDERATED, merci flo850
Cela dit, j'ai l'impression qu'il n'est pas à l'abri d'une interruption du traitement de ses requêtes avec cette méthode...
Marsh Posté le 30-05-2013 à 11:09:26
Bonjour, désolé de la réponse tardive, effectivement c'est pour un besoin d'archivage.
flo, merci pour ce lien, mais je l'avais déjà visionné
J'ai adopté une autre solution, j'ouvre plusieurs connexion sql et je fais un traitement en php avant de trouver une meilleur solution (une simple serai de créer un utilisateur avec accès sur les deux bases mais par besoin de sécurité, je ne veux pas).
Merci pour votre aide,
Cordialement
Paul
Marsh Posté le 28-05-2013 à 15:06:30
Bonjour,
J'ai une question (pour m'éviter à faire des while en php et parce que je suis curieux)
Je voudrai savoir s'il est possible d'avoir deux liens "identifier" pour une meme requête (donc en passant par php et mysql)
Exemple:
Insert into `archive`.`test` (`col1`,`col2`) select `col1`,`col2` from `prod`.`test` where `archive`.`test`.`col3`='toto'
ça c'est la requête, mais je vois pas comment faire pour la ligne suivante
mysql_query("sql",..........) la je vois pas comment mettre mes deux liens (supposant deux bases sur deux serveurs différents)
Merci de vos réponse.