dedlfix: Nächstes Problem: LIMIT mit Variablen

Beitrag lesen

Hi!

Wenn ich aber LIMIT mit Variablen mache, zB so:

$startposition=3;

$aktion='SELECT testbank_id, testbank_vorname, testbank_familienname FROM 014_testbank LIMIT $startposition,4';

  
Du verwendest die Variable $startposition nicht. Stattdessen steht in $aktion kurz vorm Schluss die Zeichenkette '$startposition'.  
  

> Eine Überprüfung mit " var\_dump($startposition); " ergibt 3(int), also eh das, was sein soll.  
  
Und $aktion?  
  
Nimm dir ein Grundlagenkapitel zu Strings unter PHP und vor allem den Unterschied zwischen '' und "" beim Interpretieren von Variablen noch einmal genauer zur Brust.  
  

> ...dann kommt eine Warnung:  
> Notice: Trying to get property of non-object in /kunden/1234567890/webseiten/blabla/blaettern.php  
  
Das sind Folgefehler, weil du irgendwo eine Funktion verwendet hast, aber nicht kontrollierst, was sie zurückgibt. Im Fehlerfall liefern viele Funktionen ein false anstelle des sonst üblichen Wertes. Ein false ist kein Objekt und hat dann auch keine Eigenschaften.  
  

> In der entsprechenden Zeile steht:  
> `echo"<p>Es wurden ".$ergebnis->num_rows." Einträge gefunden.</p>\n";`{:.language-php}  
  
Wenn du dir mal $ergebnis ansiehst:  
  
  var\_dump($ergebnis);   => false  
  
ist da kein mysqli- oder mysqli\_stmt-Objekt zu sehen.  
  
Fehler abfangen statt einfach weiterzumachen, als ob immer schönes Wetter ist, zeichnen ein robustes Script aus.  
  
  
Übrigens, die Werte für LIMIT kann man nicht per Platzhalter in einem Prepared Statement übergeben. Die müssen direkt reingeschrieben werden. Wenn du nicht absolut sicher bist, dass es Zahlen sind, musst du noch dafür sorgen, dass sie welche werden, sonst hast du da am Prepared-Statement-Mechanismus vorbei eine SQL-Injection-Lücke geschaffen.  
  
Die LIMIT-Werte sind dann garantiert Zahlen, wenn sie aus einer einfachen Zuweisung stammen (so wie in deinem Beispiel), mit einer anderen Zahl verrechnet wurden (plus/minus/mal/durch irgendwas) oder mit intval() oder einem Typecast zu einer Zahl zwangskonvertiert wurden.  
  
  
Lo!