A voir également:
- Remplacer msql par pdo
- Remplacer disque dur par ssd - Guide
- Remplacer par word - Guide
- Quel site pour remplacer coco - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- Remplacer tete sur photo - Guide
16 réponses
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
22 oct. 2012 à 20:50
22 oct. 2012 à 20:50
$nbpages = ceil( count($total) / $nb);
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
22 oct. 2012 à 20:57
22 oct. 2012 à 20:57
bonsoir,
les codes que tu donnes ne sont pas clair et ça ne sert pas a grand chose de remplacer les fonctions mysql par pdo si tu n'utilises pas les requêtes préparé
par exemple
c'est un exemple d'utilisation de pdo. il faut toujours préparer ses requêtes, rien que pour éviter les injections sql
les codes que tu donnes ne sont pas clair et ça ne sert pas a grand chose de remplacer les fonctions mysql par pdo si tu n'utilises pas les requêtes préparé
par exemple
$pdo = new PDO(); $req = $pdo->prepare('SELECT ....WHERE id = :variable LIMIT 1'); $req->execute(array('variable' => $id)); $data = $req->fetch(PDO::FETCH_OBJ); $req->closeCursor();
c'est un exemple d'utilisation de pdo. il faut toujours préparer ses requêtes, rien que pour éviter les injections sql
Donc, si j'ai bien compris, une de mes requêtes doit donner ça :
Mais là, j'ai deux messages d'erreur :
Warning: PDO::query() expects parameter 1 to be string, object given in /.../index.php on line 108
Fatal error: Call to a member function rowCount() on a non-object in /.../index.php on line 109
$id = intval($data['id']); $sql2 = $cnx->prepare("SELECT id FROM ".$prefixe."_comments WHERE news='$id'"); $sql2->execute(); $req = $cnx->query($sql2); $res = $req->rowCount();
Mais là, j'ai deux messages d'erreur :
Warning: PDO::query() expects parameter 1 to be string, object given in /.../index.php on line 108
Fatal error: Call to a member function rowCount() on a non-object in /.../index.php on line 109
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
23 oct. 2012 à 12:51
23 oct. 2012 à 12:51
$id = intval($data['id']); $req = $cnx->prepare("SELECT id FROM ".$prefixe."_comments WHERE news= :id"); $req->execute(array(':id' => $id)); $res = $req->rowCount();
Merci maka54,
Maintenant, j'ai une autre erreur qui apparaît, mes news ne s'affichent pas :
Warning: Division by zero in /.../index.php on line 150
Maintenant, j'ai une autre erreur qui apparaît, mes news ne s'affichent pas :
Warning: Division by zero in /.../index.php on line 150
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
23 oct. 2012 à 14:20
23 oct. 2012 à 14:20
Warning: Division by zero in /.../index.php on line 150
ligne 150 ??
$nbpages = ceil( count($total) / $nb);
cela veux dire que $nb = 0;
ligne 150 ??
$nbpages = ceil( count($total) / $nb);
cela veux dire que $nb = 0;
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
23 oct. 2012 à 14:25
23 oct. 2012 à 14:25
il suffit d'ajouter
if($nb == 0) $nb = 1;
avant ta disvision
même si ta page existe tu en as forcément une
if($nb == 0) $nb = 1;
avant ta disvision
même si ta page existe tu en as forcément une
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
23 oct. 2012 à 14:31
23 oct. 2012 à 14:31
j'oublié intval sur l'id ne sert a rien en passant par prepare si le champ de ta table est en int la valeur est converti en int avant d'être testé c'est un des avantages de pdo
J'ai essayé d'adapter à PDO ces requêtes, mais je n'y arrive pas, ce qui fait que mes news ne s'affichent pas :
if($archives != 'off') { $sql = "SELECT *, DATE_FORMAT(date, '%d.%m.%Y') as date FROM ".$prefixe." WHERE valide!='inv' AND date >= '".$datum."' ORDER BY id $ordre LIMIT ".intval($debut).",".intval($nb); } else { $sql = "SELECT *, DATE_FORMAT(date, '%d.%m.%Y') as date FROM ".$prefixe." WHERE valide!='inv' ORDER BY id $ordre LIMIT ".intval($debut).",".intval($nb); } // parcours et affichage des résultats if($p = @mysql_query($sql,$c)){ while($data = @mysql_fetch_array($p)){ $sql2 = "SELECT * FROM ".$prefixe."_smileys"; // on envoie la requête $req2 = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error()); while($resultat = mysql_fetch_array($req2)) { $data['texte'] = str_replace($resultat['code'],'<img src="'.$url.'admin/smileys/'.$resultat['url'].'" style="border:0"/>',$data['texte']); }
J'avais cherché l'équivalent en PDO de mysql_query et mysql_fetch_array. J'avais fait ça :
et
// parcours et affichage des résultats if($p = $cnx->query($sql,$c)){ while($data = $p->fetch(PDO::FETCH_ASSOC));{
et
// on envoie la requête $req2 = $cnx->query($sql2); while($resultat = $req2->fetch(PDO::FETCH_ASSOC)) {
Utilisateur anonyme
23 oct. 2012 à 17:08
23 oct. 2012 à 17:08
Bonjour
Ça n'a pas l'air si mal que ça. À condition d'enlever le ; en trop :
Ça n'a pas l'air si mal que ça. À condition d'enlever le ; en trop :
while($data = $p->fetch(PDO::FETCH_ASSOC));{
Ah oui, le ; n'était pas à sa place. Pourtant, ça ne marche pas, j'ai une erreur :
Warning: PDO::query() [pdo.query]: SQLSTATE[HY000]: General error: mode must be an integer
Warning: PDO::query() [pdo.query]: SQLSTATE[HY000]: General error: mode must be an integer
Utilisateur anonyme
24 oct. 2012 à 00:08
24 oct. 2012 à 00:08
Sur quelle ligne as-tu cette erreur ? Sans doute celle-ci :
Qu'est-ce que c'est ce $c ? D'où sort-il ?
$cnx->query($sql,$c)
Qu'est-ce que c'est ce $c ? D'où sort-il ?
Je me suis renseigné depuis sur des forums, j'en suis là :
ça devrait marcher, et pourtant j'ai cette erreur :
Warning: PDO::query() expects parameter 1 to be string, object given...à cette ligne :
Merci de ton aide !
// requete sql if($archives != 'off') { $sql = $cnx->prepare("SELECT *, DATE_FORMAT(date, '%d.%m.%Y') as date FROM ".$prefixe." WHERE valide!= ? AND date >= '".$datum."' ORDER BY id $ordre LIMIT ".intval($debut).",".intval($nb)); $sql->execute( array( 'inv' ) ); } else { $sql = $cnx->prepare("SELECT *, DATE_FORMAT(date, '%d.%m.%Y') as date FROM ".$prefixe." WHERE valide!= ? ORDER BY id $ordre LIMIT ".intval($debut).",".intval($nb)); $sql->execute( array( 'inv' ) ); } // parcours et affichage des résultats if($p = $cnx->query($sql)){ while($data = $p->fetch(PDO::FETCH_ASSOC)){
ça devrait marcher, et pourtant j'ai cette erreur :
Warning: PDO::query() expects parameter 1 to be string, object given...à cette ligne :
if($p = $cnx->query($sql)){
Merci de ton aide !
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
24 oct. 2012 à 19:44
24 oct. 2012 à 19:44
tu melange tout,
va voir comment fonctionne pdo, https://www.php.net/manual/fr/book.pdo.php
apres si tu as des questions, demande, mais je pense pas que tu t'es trop renseigné.
voici une requete pas à pas :
va voir comment fonctionne pdo, https://www.php.net/manual/fr/book.pdo.php
apres si tu as des questions, demande, mais je pense pas que tu t'es trop renseigné.
voici une requete pas à pas :
une requete préparée : $sql c'est ta requete (text brute) $sql = "SELECT * FROM table WHERE id = :id"; $cnx ets ton instance pdo tu te connecte à l'instance pdo puis prepare ta requete $req = $cnx->prepare( $sql ); $req est le resultat qu'il faut executer avec la valeur du parametre dans prepare ( :id ) $req->execute(array(':id' => $id)); seulement maintenant, tu recupere les données while($data = $req->fetch(PDO::FETCH_ASSOC)){ } une requete simple : (sans parametre) $sql c'est ta requete (text brute) $sql = "SELECT * FROM table "; tu peux faire query directement sans prepare ni execute $req = $cnx->query($sql)
Avec une requête simple, ça marche, mes news s'affichent. J'avais compris qu'il fallait obligatoirement préparer ses requêtes pour éviter les injections sql.
Atropa
Messages postés
1940
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
25 oct. 2012 à 09:12
25 oct. 2012 à 09:12
si tu prépare tes requêtes de cette facon
$rq = $pdo->prepare('SELECT * FROM table WHERE id=\''.$id.'\' LIMIT 1');
tu n'évite en rien les injections sql
par contre si tu prépare ta requête comme ça
$rq = $pdo->prepare(SELECT * FROM table WHERE id = :id LIMIT 1);
là tu passes la valeur id est considéré comme une variable elle n'est plus simplement concaténé à la requête
$rq = $pdo->prepare('SELECT * FROM table WHERE id=\''.$id.'\' LIMIT 1');
tu n'évite en rien les injections sql
par contre si tu prépare ta requête comme ça
$rq = $pdo->prepare(SELECT * FROM table WHERE id = :id LIMIT 1);
là tu passes la valeur id est considéré comme une variable elle n'est plus simplement concaténé à la requête