Frage von turbotob, 52

Mysqli Abfrage im While mit Where im SQL?

Hay Leute, hab da so nen kleines Problem und finde es nicht.

Wahrscheinlich schon zu müde :D

Vielleicht könnt ihr mir da helfen da ich grad erst mit Mysqli anfange

Folgendes Problem:

Ich hab ne Whileschleife und der soll mir den Datensatz von Person x auslesen.

Dazu hab ich im sql Code ein WHERE eingebaut.

Folgender Code funktioniert:

$sql = 'SELECT * from teamspeakserver WHERE USERNAME = "info@email.com"';

Schreibe ichs dann aber so, da er das ja aus ner Variable auslesen soll

$sql = 'SELECT * from teamspeakserver WHERE USERNAME = ' . $usrmail . '';

bekomme ich folgende Fehlermeldung:

Fatal error: Call to a member function fetch_object() on a non-object

Whileschleife

$abfrage = $db->query($sql);

<?php

while($objekt = $abfrage->fetch_object())

{

echo

'

'. $objekt->ID .'
'. $objekt->TSNAME .'
'. $objekt->PORT .'
@mdo
';

}

?>"
Antwort
von Fisker31, 29

Der Fehler liegt in der Einbindung der Variable. Eine PHP Variable innerhalb eines MySQL Befehl muss mit ' eingegrenzt sein. Da du den Befehl bereits mit einem ' eröffnet hast kannst du nicht mittendrin mit einem ' eine Variable kennzeichnen. Richtig wäre es also zum Beispiel so:

$sql = "SELECT * from teamspeakserver WHERE USERNAME ='$usrmail'";



Kommentar von turbotob ,

Hay danke dir, bekomme jetzt keine Fehlermeldung mehr, leider liest er jetzt jedoch auch nicht mehr den Eintrag aus der Datenbank.

Die Variable $usrmail wird mit jetzt grau im Notepad++ angezeigt, wie der gesamte Text. Ist das so richtig ?

LG Tobias

Kommentar von Fisker31 ,

Das ist normal, da Text Highlighting innerhalb des MySQL nicht angewendet wird. Liegt daran das die Variable nun Teil des ganzen Befehls ist.

Warum er allerdings keine Einträge mehr ausliest weiß ich nicht. Hast du geprüft ob die Bezeichnungen z. B. in der Tabelle auch korrekt sind? MySQL ist Case Sensitive, daher muss auf Groß- und Kleinschreibung geachtet werden.

Kommentar von turbotob ,

ja darauf hab ich geachtet.

Habs jetzt so gemacht und nu funktioniert es

if($_SESSION['memberID'] == 1)

{
$stmt = $db->prepare('SELECT * FROM teamspeakserver');
}
else
{
$stmt = $db->prepare('SELECT * FROM teamspeakserver WHERE USERNAME = ?');
if(!$stmt->bind_param('s', $usrmail)) {
// Fehler...
}
}

if(!$stmt->execute()) {
// Fehler...
}
$result = $stmt->get_result();
if(!$result) {
// Fehler...
}

Ich bedanke mich trotzdem für deine Hilfe.

Sprich also innerhalb eines SQL Befehls mit " ' arbeiten?

Habe bisher immer alles in ' geschrieben

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten