Mysql
 sql >> Base de données >  >> RDS >> Mysql

Toutes les valeurs ='s' dans le tableau dans l'erreur PHP

Pourquoi var_dump(stmt['likedFour']); retourner 's' :

Parce qu'il vous manque le signe dollar avant stmt , donc PHP pense que vous essayez d'accéder à la constante stmt au lieu de la variable $stmt . Puisque vous n'avez pas défini cette constante, il reviendra à supposer que vous essayez d'accéder à la chaîne "stmt" . Pour les chaînes, les indices doivent être numériques, donc PHP devrait vous lancer un avertissement "Décalage de chaîne illégal", mais essaiera de le réparer pour vous en diffusant 'likedFour' à un entier (qui sera 0 ).

Par conséquent, var_dump(stmt['likedFour']) signifie exactement la même chose que var_dump("stmt"[0]) à PHP, c'est pourquoi vous obtenez la sortie "s" :le premier caractère de "stmt" .

Comment obtenir le résultat que vous réellement veux :

Vous devez d'abord récupérer les lignes résultantes de votre requête. $stmt est le mysqli_stmt objet que vous utilisez pour exécuter la requête et récupérer les résultats, il ne s'agit pas réellement du résultat lui-même.

Pour vous éviter des maux de tête à l'avenir, vérifiez toujours si votre requête s'est même exécutée avec succès avant d'essayer de récupérer les résultats. Récupérez ensuite la ligne de données :

$success = $stmt->execute();
if (!$success) {
    echo $stmt->error;
} else if ($stmt->num_rows == 0) {
    echo 'No results matching that username';
} else {
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    var_dump($row['likedFour']);
}

Si vous ne savez pas combien de lignes seront renvoyées, parcourez-les par précaution :

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    var_dump($row['likedFour']);
}