Echapper des apostrophes

Fermé
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - 18 avril 2015 à 17:10
seabust Messages postés 740 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 30 juillet 2015 - 18 avril 2015 à 17:13
Bonjour à tous...


J'ai créé quelques lignes en php pour remplir une table dans une bdd à l'aide d'un fichier "fournisseur.csv" (Excel ou Calc : champs séparés par des ;)

L'insertion dans la table se passe bien jusqu'à ce que ma boucle rencontre une apostrophe et là :
"Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use...."

Je peux bien sûr pour éviter cette erreur "préparer" manuellement auparavant mon fichier CSV en supprimant d'avance tous les ' avec un CTRL + H, mais j'aimerai y arriver dans le traitement php...
J'ai bien essayé un str_replace mais cela ne fonctionne pas !

Voici mon code :


while (($data = fgetcsv($fichier,";")) !== FALSE) {
$designation = $data[0];
$designation = str_replace("'", " ", $designation);
$ht = $data[1];
$requete = $DB->exec("INSERT INTO sab (designation,ht) VALUES ('$designation','$ht')");
}


Merci d'avance pour votre aide !




1 réponse

seabust Messages postés 740 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 30 juillet 2015 101
18 avril 2015 à 17:13
La façon la plus propre est d'utiliser les requêtes préparées. Le mieux est de TOUT LE TEMPS les utiliser, même quand vous pensez le pas en avoir besoin. En effet ça évite les attaques par injection SQL.

Je te renvoie vers la documentation PHP avec un exemple sur comment le faire : https://www.php.net/manual/fr/pdo.prepare.php
0