Varför gör var_dump(stmt['likedFour']);
returnera 's'
:
Eftersom du saknar dollartecknet före stmt
, så PHP tror att du försöker komma åt konstanten stmt
istället för variabeln $stmt
. Eftersom du inte har definierat den konstanten kommer den att falla tillbaka till att anta att du försöker komma åt strängen "stmt"
. För strängar måste index vara numeriska så PHP borde ge dig en "Olaglig strängförskjutning"-varning men kommer att försöka fixa det åt dig genom att casta 'likedFour'
till ett heltal (som blir 0
).
Därför var_dump(stmt['likedFour'])
betyder exakt samma sak som var_dump("stmt"[0])
till PHP, vilket är anledningen till att du får utdata "s"
:det första tecknet från "stmt"
.
Hur får du det resultat du faktiskt vill ha:
Du måste först hämta de resulterande raderna från din fråga. $stmt
är mysqli_stmt
objekt som du använder för att köra frågan och hämta resultaten, det är faktiskt inte själva resultatet.
För att spara dig själv huvudvärk i framtiden, kontrollera alltid om din fråga ens har körts framgångsrikt innan du försöker hämta resultaten. Hämta sedan raden med data:
$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']);
}
Om du inte vet hur många rader som kommer att returneras, gå igenom dem för säkerhets skull:
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
var_dump($row['likedFour']);
}