J'essaie de ne pas être frustré, mais j'ai récemment appris que mysql_*
est déprécié en PHP. J'ai décidé d'apprendre à utiliser PDO. Je viens de la regarder cet après-midi et la connexion à la base de données à l'aide de cette fonction était facile, mais je voulais ensuite aller chercher une ligne avec elle et la sauvegarder sous forme de tableau indexé par les noms de colonne mysql_fetch_array
fait). Je ne peux pas le comprendre pour me sauver la vie. Je posterai mon code pour clarifier, et je suis sûr que c'est quelque chose de simple (toutes les erreurs de programmation sont toujours simples), mais je fais vraiment quelque chose de mal.
//CONNECT TO DATABASE
$Host = $_PARAM["DatabaseServer"];
$db = $_PARAM["MainDatabase"];
$dbuser = $_PARAM["DatabaseUser"];
$dbpass = $_PARAM["DatabasePass"];
try
{
$Database = new PDO("mysql:Host=$Host;dbname=$db", $dbuser, $dbpass);
}
catch (PDOException $e)
{
echo "There was an unexpected error. Please try again, or contact us with concerns";
}
$stmt = $Database->prepare("SELECT * FROM users WHERE username=?");
$stmt->execute(array($sUserCook));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo $row["username"];
Merci pour l'aide.
Alex
fetchAll
fait ce qu'il dit: il récupère tous les résultats d'une requête. Comme il récupère beaucoup de résultats, vous obtenez un tableau indexé.
fetch
fait ce que vous cherchez peut-être si vous ne voulez qu'une ligne: elle extrait un résultat pour une requête. Si vous convertissez le code mysql_*
en PDO, le moyen le plus rapide consiste simplement à utiliser cette méthode à la place de mysql_fetch_assoc
.
Si vous continuez à utiliser fetchAll
: votre code ressemblera probablement à ceci:
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
echo $row['username'];
}
Comme je l'ai dit, si vous ne convertissez que du code hérité en code PDO, il serait peut-être plus simple de modifier toutes les requêtes en instructions préparées et de remplacer ce qui suit:
mysql_fetch_assoc($result)
$stmt->fetch(PDO::FETCH_ASSOC)
mysql_num_rows($result)
$stmt->rowCount()
while ($row = mysql_fetch_assoc($result)) {}
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {}
Utilisation
$row = $stmt->fetch(PDO::FETCH_ASSOC);
Vous obtiendrez le premier résultat de la requête.