Bind_param Problem

EddieG

Erfahrenes Mitglied
OO Mysqli Probleme

Hi,
ich habe fongendes Problem und zwar bekomme ich
Fatal error: Call to a member function bind_param() on a non-object
der code schaut so aus
PHP:
            $siege=$siege+1;
            $niederlagen = $niederlagen+1;
            $sqlw = $dbs->prepare("UPDATE 1n1_player (siege,punkte) VALUES (?,?) WHERE playername='$playerW'");
            $sqlL = $dbs->prepare("UPDATE 1n1_player (niederlagen,punkte) VALUES (?,?) WHERE playername='$playerL'");
            $sqlL->bind_param('ii',$niederlagen,$pointsLose);
            $sqlw->bind_param('ii',$siege,$pointsWin);
            $sqlw->execute();
            $sqlL->execute();
            $sqlL->close();
            $sqlw->close();
            $dbs->close();
der code ist in einer Methode.
ich gebe über die Instantiierung der klasse auch meine DB Instanz mit.
 
Zuletzt bearbeitet:
Deine Fehlermeldung sagt dir eigentlich schon, was Sache ist. $sqlL ist kein Objekt. Das bedeutet, das $dbs->prepare() fehlgeschlagen ist.

Was genau benutzt du? PDO? Sonstige Abstraktions-Klassen?

BTW: Warum verwendest du PS, wenn du dann doch Variablen direkt in den Query einbaust?
 
Uhm weis nicht genau was du meinst ich versuche mich erst seit kurzem an die OOP.
Ich habe aber das bind_param nun raus geschmissen und den normalen query befehl genommen mit SET etc.
Ich habe ein weiteres Problem und zwar gehen keine meiner Select Anweisungen.
PHP:
  $check_winner = "SELECT * FROM 1n1_player WHERE playername ='".$db->real_escape_string($gwinner[0])."'";
  if($db->num_rows($db->query($check_winner))>0)
  {
  $getWinnerstats = $db->query($check_winner);
    while($rowWinner=$getWinnerstats->fetch_object())
      {
        $WinnerR = $rowWinner->Rank;
        $points_W = $rowWinner->punkte;
        $winsW = $rowWinner->siege;
      }
  }
  else{
    echo "The player ".$gwinner[0]." is not registrated<br/>";
  }
Wenn ich es richtig verstanden habe kann ich für alle befehle wo vorher mysqli.... stand meine Instanz einsetzen.
in meinem Fall $db.
Da frag mich, warum es nicht funktioniert vom Code her stimmt es doch :(

Ich nutze php5.2.11
 
Zuletzt bearbeitet:
Du musst num_rows auf die Ergebnisliste anwenden, und nicht auf das mysqli-Objekt)
Code:
if($getWinnerstats=$db->query($check_winner))
  {
    if($getWinnerstats->num_rows)
      {
        while($rowWinner=$getWinnerstats->fetch_object())
        {
          $WinnerR = $rowWinner->Rank;
          $points_W = $rowWinner->punkte;
          $winsW = $rowWinner->siege;
        }
      }
   }
 
Geht leider nicht.
Müsste es nicht eigentlich so heißen?
PHP:
    if($getWinnerstats->num_rows>0)

Habe aber beides versucht auch ohne das ">0".
Er müsste eigentlich in den Else zweig springen.
 
Will dir ja nicht zu nahe treten, aber ich schlage vor, bevor du so komplexe Dinge wie mysqli machst, solltest du erstmal mit den grundlegenden Spracheigenschaften klar kommen. Ob du nun

PHP:
if( $wert )

oder

PHP:
if( $wert > 0)

schreibst, bleibt sich gleich. Beides mal wirst du true bekommen. Aber Vorsicht, $wert könnte auch negativ werden. Dann würde zwar die erste Variante aber nicht die zweite true liefern. Ich lese aus dem Manual nicht, das num_rows (propery) negativ werden kann. Folglich ist es entweder 0 oder ein Wert größer 0. Daher ist die Prüfung mit > nicht notwendig.

Das mit bind_param() ist an und für sich eine tolle Sache. Es kann die Applikation etwas sicherer machen.
 
@saftmeister
Du hast zwar Recht, dass man soetwas wissen sollte - allerdings sind solche Feinheiten in der Dokumentation auch gut versteckt, wie ich finde. Es nützt ja auch nichts, wenn man die Doku von Kopf bis Fuß ließt und danach wieder über die Hälfte vergisst, weil schlicht die Praxis fehlt.
Zumindest geht es mir so. ;)
 
Hm ja das wusste ich nicht :(

Das OO Mysqli bringt mich zur Verzweiflung keine der SQL Anweisungen geht so wirklich ;)
mal als beispiel
PHP:
 $sql2 = $db->query("SELECT wert FROM inhalt WHERE name='".$db->real_escape_string($name)."'");
 $rw2 = $sql2->fetch_object; 
 $geswert= $rw2->wert;
ein anderes beispiel mit schleife
PHP:
  $hol_id = $db->query("SELECT id FROM eintrag WHERE name='$name'");
  while($row1=$hol_id->fetch_object())
  {
    $die_abgerufene_id= $row1->id;
  }
und selbst ein simpler insert geht nicht

PHP:
$eintragen= $db->query("INSERT INTO beitrag(titel,text,usr_id) 
                                    VALUES 
                                    ('".$db->real_escape_string($beitrag[1])."','".$beitrag[2]."','".$beitrag[0]."',
                                    WHERE b_id='".$b_id."'");


geht bind param eigentlich nie wenn ein WHERE noch inder SQL Anweisung ist?
 
Zuletzt bearbeitet:
bind_param() und query() darfst du nicht zusammen hauen, da das eine direkt eine Anfrage startet (query()) und das andere erst einen Ausdruck präpariert, in diesen mit bind_param() die Parameter einbindet und mit execute() erst die Anfrage startet.
 
Zurück