Tabellenabfrage scheitert.

MidnightBreeze

Grünschnabel
Code:
$qry=mysqli_query("SELECT * FROM botanfragen WHERE botid='$botid'", $con);
if(!$qry)
{
header("Location:error.php?id=2");
}

Er gibt mir immer ein Error aus, auch wenn die $botid in der Datenbank exisitiert.
Ich habe auch schon versucht die BotID direkt in die PHP zu schreiben, aber auch dann findet er nichts.
Normalerweise soll das Error mit der ID 2 nur ausgelöst werden, wenn ein Bot nicht in der Datenbank existiert.

Dass die Verbindung funzt weiß ich, da ich in die Datenbank in genau die gleiche Tabelle bots eintragen kann.
Es ist nur die Abfrage die irgendwie nicht funzt.

Hilfe? :D
 
Hi

a) Ersetz '$botid' mit $botid wenns eine Nummer ist
b) Was gibt echo mysqli_error($con); aus, direkt vor der header-Anweisung?
c) SQL-Injections...
 
a) BotID ist Varchar. Ist ein TS3 String Aber in diesem Beispiel ist der Wert 123456bot
Der Wert existiert auch in der Datenbank, also sollte er eigtl. nicht in den Errorzweig gehen.
b)
Habe den Code mal so gemacht:
Code:
$qry=mysqli_query("SELECT * FROM botanfragen WHERE botid='$botid'", $con);
if(!$qry)
{
echo mysqli_error($con);
echo "test";
echo mysqli_error($qry);
//header("Location:error.php?id=2");
}
Und als Ausgabe krieg ich nur mein debugging "test"
Code:
 test [/test]

c) Was ist mit injections?
 
Muss man vllt. noch dazu sagen.
Code:
 if(!qry)
ist eigentlich ohne das Ausrufezeichen.
Normalerweise soll er ja nur weitermachen wenn die Query eben nichts gefunden hat.

Ich hab das nur mal zum debuggen geändert.
 
Also das mit dem Rufzeichen ist dann das Hauptproblem. Wenn "ohne" das Rufzeichen in das if reingegangen wird dann hat die Abfrage ohne Fehler funktioniert. Das Rufzeichen muss dabei sein um für Fehler reinzugehen. Leere Ergebnisse liefern hier nicht false.

Und dann, wenn die Abfrage fehlerfrei durch ist, musst du zuerst eine Zeile vom Ergebnis fetchen, zB. mit mysqli_fetch_array. Wenn das false liefert war das Ergebnis leer.

Injections:
Deine derzeitige Abfrage ist ein Sicherheitsrisiko.
Siehe Prepared Statements, da gibts genug Code :google:
 
Müsste das nicht so lauten? Oder ist dies bei MySQLi egal?
SQL:
$qry=mysqli_query($con, "SELECT * FROM botanfragen WHERE botid='$botid'");
 
Das mit dem $con war wirklich der Fehler warum nix funktioniert hat.
Ich benutze jetzt diese Form (Nicht genau das, aber das entspricht ungefähr meinem Script):
Code:
$user = $_GET['userid'];

$qry=mysqli_query($con, "SELECT * FROM users WHERE uid='$user'");

if(!$qry)
{
  echo "Datenbankfehler";
} else {
  if((mysqli_num_rows($qry)==0))
  {
    echo "User existiert nicht";
  } else {
    echo "User existiert bereits";


Als nächstes mache ich mich mal an die Sicherheit ^w^
 
Zurück