Bonjour,
Je créer un espace membre pour mon site internet. J'aimerais savoir si il y a une équivalance de mysql_num_row en PDO ?
Merci d'avance pour vos reponses !

17 réponses


wallkera
Auteur

Merci mais je ne comprends pas le code (je n'arrive pas à l'insérer). Je suis vraiment débutant en php.

wallkera
Auteur

Vous pouvez me donnez des liens ou un code svp.

Tu arrives a faire d'autres requetes en PDO, pour ton site ? Si oui, mets-nous un exemple de code qui marche.

wallkera
Auteur

ok juste pour me connecter à me base de données

$pdo = new PDO('mysql:host=localhost;dbname=membre', 'root', '');

Quelle est la requete SQL que tu veux passer ?

wallkera
Auteur

J'aimerais une fois que la personne c'est inscrit, elle puisse se connecter. Avec une requête $login, chercher dans ma base de données, si le login est bien inscrit dans la base de données, lui afficher son espace membre(je suis pas sur d'avoir été claire).

Je suppose qu'il y a aussi un mot de passe:
Dans ce cas:

$query = "SELECT * FROM users WHERE name = " . $_POST'name'] . " AND pass = " . $_POST'mot_de_passe'];
$res = $pdo->query( $query );
$num_rows = $res->fetchColumn();

A adapter si tu n'as pas de mot de passe, ou si tu hash (j'espère que c'est le cas) ton mot de passe.

wallkera
Auteur

Merci beaucoup mais à quoi est du cette erreur ?
Fatal error: Call to a member function fetchColumn() on a non-object in C:\wamp\www\membre2\login.php on line 18

t'as instancié $pdo, comme tu le montrais plus haut ?

wallkera
Auteur

Voila mon code source, il me semble que je l'ai instancier.

$pdo = new PDO('mysql:host=localhost;dbname=membre', 'root', '');
                    $password = md5($password);
                $query = "SELECT * FROM users WHERE login = " . $_POST'pseudo'] . " AND password = " . $_POST'password'];
                $res = $pdo->query( $query );
                $num_rows = $res->fetchColumn();

tu as bien une tables users, dans ta base de données ?

wallkera
Auteur

Oui

Sur la doc PHP, ils utilisent PDO::prepare et PDO::execute.
Ça te permettra aussi de sécuriser ton code !

$pdo = new PDO('mysql:host=localhost;dbname=membre', 'root', '');
$password = md5($_POST'password']);
$query = "SELECT * FROM users WHERE login = ? AND password = ?";
$res = $pdo->prepare( $query );
$res = $pdo->execute(array($_POST'pseudo'], $password));
$num_rows = $res->fetchColumn();

Pour plus d'information :
http://www.php.net/manual/fr/pdostatement.fetchcolumn.php
http://www.php.net/manual/fr/pdo.prepare.php

<?php
$dbh = new PDO(/* ta chaine pour te connecter */);
$stmt = $dbh->prepare("SELECT count(username) FROM users WHERE login = :login AND password = :pwd");
$sth->bindParam(':login', $login, PDO::PARAM_STR);
$sth->bindParam(':pwd', $password, PDO::PARAM_STR);
$stmt->execute();
$nbResults = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($nbResults);

Je trouve cette façon de faire vachement plus élégante, à aucun moment ta base ne renvoie le mot de passe, pour peu que $nbResult[0] = 1 tout roule, dans tous les autres cas tu jettes.
Mais peu importe la solution ne sors JAMAIS un mot de passe de la database, il est bien là où il est...

$tavars = $ta_variable_sql->rowCount();

Tout d'abord, l'équivalence à mysql_num_rows() qui est une fonction dépréciée, est rowCount(). Pour savoir, il suffit de ce rendre sur: www.php.net et de naviguer un peu sur ce site pour trouver tes réponses.

Concernant ton espace membre, il faut effectivement faire une requête similaire à celle que vient de donner Garniture-banner. Cependant, il ne faut pas oublier qu'un mot de passe doit être crypter dans une base de données !!! Il ne faut pas que le mot de passe soit visible clairement dans la base (sauf si tu veux créer des problèmes, et ce sont les utilisateurs qui subissent les conséquences). Tu dois donc crypter le mot de passe à l'inscription, et à la connexion, tu cryptes de nouveaux le champ mot de passe du formulaire de connexion et tu compares ce dernier avec le champ password de ta base de données.