-
PHP MYSQL et apostrophe
Bonjour à tous,
je suis confronté au problème suivant:
je développe sous easyphp 5.3.1.0 une appli web avec une BDD Mysql et là je travaille sur une procédure de migration entre deux bases.
j'ai une table T1 qui contient un champ qui s'appelle champ1 et de type varchar
Ce champ champ1 me sert de clé unique pour identifier un élément.
Donc lors de l'export d'un élément j'aimerai tester avant si la valeur $nomValeur que je veux exporter n'existe pas déja pour cette colonne.
je fais la requête suivante :
Code:
select * from T1 where champ1 = '$nomValeur'
;
Or la donnée $nomValeur peut contenir une ou plusieurs apostrophe et typiquement pour mon test j'ai crée dans la base qui va recevoir la donnée une ligne de valeur champ1 = TEST A'postr'op'he. la valeur contenue dans le champ champ1 est bien egale à TEST A'postr'op'he
j'ai bien verifié que ma donnée $nomValeur = "TEST A'postr'op'he" et quand je fais ma requête je n'ai pas de resultat qui me dit que la donnée existe deja alors que quand c'est une chaine sans apostrophe, tout se passe bien ma fonction me renvoit que la donnée existe deja.
Des idéees?merci d'avance
-
Tu t'embêtes à priori pour rien.
Si tu veux envoyer les lignes de T1 qui n'existent pas dans ta T2 avec champ1 déclaré comme clef unique dans les deux tables :
Code:
INSERT IGNORE INTO T2 (SELECT (teschamps) FROM T1)
Sinon pour comprendre ton problème quand même : est-ce que tes chaines ne seraient pas convertis en entités HTML lors de l'insertion ?
-
Merci pour ta réponse.
je vais peut être mieu exposé mon problème.
la table de départ T1 est déclaré de la façon suivante : (champ1T1, champ2T1) avec champ1T1 comme clé primaire.
La table T2 est déclarée de la façon suivante (champ1T2, champ2T2, champ3T2, etc etc...) avec champ1T2 comme clé primaire autoincrement et dans cette table pour la migration champ2T2 doit être égal a champ1T1 et champ3T2 doit être égal a champ2T1. En gros (champ2T2, champ3T2) doit être un couple unique dans la table T2.
je précise quand même que les 2 tables ne sont pas sur la même base de données mais ça ne me pose aucun problème ça.
je fais donc ma migration la 1ere fois et tout se passe bien. je veux donc relancer ma migration avec la table T2 déjà à jour avec les données de T1 , et vérifier donc que cette fois ci aucune donnée de T1 soit insérée dans T2. je vérifie donc que le couple (champ1T1, champ2T1) n'est pas déjà pressent dans la table T2 d’où pour chaque ligne de T1 je fais
$query = "SELECT * FROM T2 WHERE champ2T2 = '$champ1T1' AND champ3T2 = '$champ2T1'" puis mysqlQuery($query, $connexion) dans une fonction qui me retourne vrai ou faux.
la vérification se passe bien pour les champs $champ2T1 qui ont une valeur ne contenant pas d'apostrophes et ils ne sont pas insérés a nouveau dans T2. Cependant pour les champs $champ2T1 qui contiennent des apostrophes ils st a nouveaux insérés. je pense que j'ai un problème de syntaxe au niveau de la comparaison de chaine de caractères pour ce champ. le contenu de ma valeur $champ2T1 est ok je l'ai vérifié par un affichage mais peut être que le fait de la mettre entre ' ' serait la source du problème et que pour la comparaison il ne prenne que la partie de la chaine qui se trouve avant l'apostrophe..
-
Ah ou aussi, si je préfère passer par la fonction de test, c'est que grâce a son résultat je vais faire ensuite ou non de nouvelles insertions dans d'autres tables de ma base B2
-
C'est bon j'ai trouvé, j'ai écrit ma requete de la manière suivante:
Code:
$query = "SELECT * FROM T2 WHERE champ2T2 = '$champ1T1' AND champ3T2 =".'"'.$champ2T1.'"';
c’était bien un pb de guillemet autour de $champ2T1
Merci de l'aide