pff vous répondez trop vite :/
pour le 'array' c'est parce que fetch retourne un tableau, donc utilise l'index que tu veux pour pour obtenir les données de la requête.
ajouter un try /catch ou tester le retour d'une fonction c'est primordial pour ne pas te trouver dans cette situation.
pour ce que tu souhaite faire un select count(*) as nb from lenomdelatable etc etc suffit.
maintenant si tu affiche les erreurs, que tu execute ledernier code qui est indiqué dans ci dessus
<?php
$username = $_SESSION['username'];
$password = $_POST['password'];
$password = sha1($password);
if($username&&$password)
{
//Cherche mot de passe
$mdp = $pdo->prepare('SELECT * FROM table WHERE username= :username AND password= :password');
$mdp->execute(array('username' => $username, 'password' => $password));
if ($row2 = $mdp->fetch()) {[...]
tu a forcément une erreur avec l'utilisation du mot clef
table qui n'est pas à sa place.
et ceci est indiqué justement par le message d'erreur fournit par le SGBD.
tu ne peux le voir car tu ne le récupère pas.
Par exmeple tu faire ceci
<?php
/**
* Récupère le message d'erreur et lève une exception
* @param $object
* @throws Exception
*/
function parsePdoError($object) {
if (is_a($object, 'PDO') || is_a($object, 'PDOStatement')) {
$err = $object->errorInfo();
throw new Exception($err);
} else {
throw new Exception('Erreur inconnue !');
}
}
try {
$pdo = new PDO('mysql:host=localhost;dbname=mediatheque', 'mediatheque', 'mediatheque');
$stmt = $pdo->prepare('SELECT count(*) as nb FROM authme WHERE username= :username AND password= :password');
if ($stmt === false) {
// gestion de l'erreur
parsePdoError($pdo);
} else {
$stmt->bindValue(':username', $_POST['username']);
$_POST['password'] = sha1($_POST['password']);
$stmt->bindValue(':password', $_POST['password']);
$ret = $stmt->execute();
if ($ret === false) {
// erreur
parsePdoError($stmt);
} else {
$data = $stmt->fetch();
if ($data['nb'] != 0) {
// le compte existe
} else {
// le compte n'existe pas
}
}
$stmt->closeCursor();
}
} catch (Exception $e) {
xdebug_var_dump($e);
}
// Attention la clause finally c'est à partir de php 5.5 si ce n'est pas ton cas enlève la et met le code qui se trouve dedans à la fin du try (fermeture de la connexion "pdo")
finally {
// fermeture de la connexion si ouverte
if (!empty($pdo)) {
$pdo = null;
}
}
@+