Suicide par PHP(pg_escape_string-PDO) même combat
Posté : 16 janv. 2007, 13:08
Bonjour, je vous situe mon problème.
Au temps de ce bon vieux php 5.1(Version Ubuntu Dapper).
Une simple insertion PostgreSQL de ce type me comblais
Et là les Romains(enfin moi), s'empoignèrent.
Aucune insertion ne se faisaient, j'avais une erreur qui voulais que j'ouvre un fichier plutôt que de réaliser l'action, cfr ce Post.
Il s'est avérer que la fonction pg_escape_string(), posait problème (cfr bug(merci Haugure) ), en gros on ne peux plus encapsuler pg_escape_string()
Donc je test ceci :
Par contre sans cette fonction tout est nikel, enfin presque puisque magic_quote étant à off, je n'ai plus de fonction qui échappe mes données.
Il y a bien addslashes(), mais ce n'est pas recommandé pour le SGBDR.
Donc je me dit, ben il faut réécrire les insertion en PDO, ce que je fais
Je ne vois que comme solution de remettre mon magic_quote à ON en attendant, j'espère que cela va aller.
Si vous avez une solution ou une idée, je suis vraiment preneur.
MaitrePylos
Au temps de ce bon vieux php 5.1(Version Ubuntu Dapper).
Une simple insertion PostgreSQL de ce type me comblais
$sqlparticipant = "INSERT INTO participant (parcivilite,parnom,parprenom,parlieunaissance,pardatenaissance)";
$sqlparticipant.= "Values ('".pg_escape_string($civilite)."','".pg_escape_string($nom)."','".pg_escape_string($prenom)."','".pg_escape_string($LieuNaissance)."',$datenaissance)";
pg_escape_string($sqlparticipant);
pg_query($sqlparticipant)or die(Erreurpgquery());
$sqlid = "SELECT idparticipant FROM participant WHERE parnom ='".$nom."' AND parprenom = '".$prenom."'";
$sqlquery =pg_query($sqlid)or die(Erreurpgquery());
$row =pg_fetch_array($sqlquery)or die(Erreurpgquery());
$_SESSION['id']=$row['idparticipant'];
Puis me pris l'envie dans un nouveau projet d'utiliser PDO, donc j'ai fais une mise à jour de PHP 5.1 vers PHP 5.2(Debian dotdeb).Et là les Romains(enfin moi), s'empoignèrent.
Aucune insertion ne se faisaient, j'avais une erreur qui voulais que j'ouvre un fichier plutôt que de réaliser l'action, cfr ce Post.
Il s'est avérer que la fonction pg_escape_string(), posait problème (cfr bug(merci Haugure) ), en gros on ne peux plus encapsuler pg_escape_string()
Donc je test ceci :
$civilite = pg_escape_string($civilite);
$nom = pg_escape_string($nom);
$prenom = pg_escape_string($prenom);
$LieuNaissance = pg_escape_string($LieuNaissance);
$sqlparticipant = "INSERT INTO participant (parcivilite,parnom,parprenom,parlieunaissance,pardatenaissance)";
$sqlparticipant.= " Values ('".$civilite."','".$nom."','".$prenom."','".$LieuNaissance."',$datenaissance)";
pg_query($sqlparticipant)or die(Erreurpgquery());
$sqlid = "SELECT idparticipant FROM participant WHERE parnom ='".$nom."' AND parprenom = '".$prenom."'";
$sqlquery =pg_query($sqlid)or die(Erreurpgquery());
$row =pg_fetch_array($sqlquery)or die(Erreurpgquery());
$_SESSION['id']=$row['idparticipant'];
En fait si j'utilise la fonction pg_escape_string(), cela ne fonctionne pas.Par contre sans cette fonction tout est nikel, enfin presque puisque magic_quote étant à off, je n'ai plus de fonction qui échappe mes données.
Il y a bien addslashes(), mais ce n'est pas recommandé pour le SGBDR.
Donc je me dit, ben il faut réécrire les insertion en PDO, ce que je fais
$pdo = new PDO('pgsql:dbname=******* host=localhost','*****','******');
$sql='INSERT INTO participant (parcivilite,parnom,parprenom,parlieunaissance,pardatenaissance) Values (:civilite,:nom,:prenom,:LieuNaissance,:datenaissance)';
$stmt = $pdo->prepare($sql);
$valeur = array(':civilite'=>$civilite,':nom'=>$nom,':prenom'=>$prenom,':LieuNaissance'=>$LieuNaissance,':datenaissance'=>$datenaissance);
$stmt->execute($valeur);
Et là horreur, j'ai le même problème, il refuse d'insérer les données mais me propose d'ouvrir un fichier à la place(peut-être que mon PDO est mauvais?).Je ne vois que comme solution de remettre mon magic_quote à ON en attendant, j'espère que cela va aller.
Si vous avez une solution ou une idée, je suis vraiment preneur.
MaitrePylos