Bind_param Problem

Ich weiß, aber das war meine Antwort auf deine Frage mit der WHERE-Klausel in bind_param() in Bezug darauf, dass du oben nur Code mit query() geschrieben hast. Aber was mir in deinem ersten Schnipsel aufgefallen ist, ist die Tatsache, dass du dort fetch_object anstatt fetch_object() verwendest. Letzteres ist richtig. Und in bind_param() darf natürlich mit WHERE gearbeitet werden.

EDIT:
In deiner INSERT-Anweisung ist ein Komma zu viel und an der Stelle dafür eine schließende Klammer zu wenig. Es müsste so aussehen:
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."'");
 
Zuletzt bearbeitet:
Ja beim Insert habe ich mich verschieben als ich es hier eingetragen habe.
Bei der Select gehen dennoch beide nicht, auch die mit der While schleife geht nicht.
Ich denke halt das eine While Schleife unpassend ist wenn man eh nur einen wert aus einer bestimmten Zeile haben möchte.
dehslab finde ich die Variante ohne while eleganter. aber wie gesagt es gehen beide nicht ich habe auch

Was mich wundert ist auch folgendes ich habe eine tabelle rangs
diese hat dei spalten id und name
wenn ich im phpMyAdmin
Code:
SELECT  `id` FROM `rangs` WHERE `name`='D'  mache bekomme ich NULL

Die Spalte name ist vom typ varchar

Und da es NULL zurückgibt kann die select im php code nicht gehen aber verstehen muss man das nicht oder?
Denn es gibt den Datensatz und es müsste der wert 2 raus kommen.
 
Wenn dir phpMyAdmin NULL zurück gibt und es 2 sein müsste, dann liegt das Problem nicht in PHP sondern in deiner Anfrage.
 
Ich habe mir mal den export der Tabelle angeschaut im feld name stand hinter jeder eingabe noch\r\n
also bei D z.b.
(2,D\r\n);
ich habe das nun korrigiert nun geht die Abfrage aber mit dem bind_param hab ich noch so die Probleme
Hier ein beispiel:

PHP:
   $statement= $db->prepare("UPDATE test (strasse) VALUES (?) WHERE name='".$db->real_escape_string($name)."'");
   $statement->bind_param('s',$strasse->Strasse());
   $statement->execute();
Als Ausgabe bekomme ich eben
Call to a member function bind_param() on a non-objec
Aber Statement ist doch mittlerweile ein Objekt
 
Anscheinend ist es doch kein Objekt. Was ich mich aber frage, ist, warum du Prepared Statements nutzt, dann aber direkt in die Anfrage eine Variable einbindest.
Versuch es mal so:
PHP:
$statement = $db->prepare('UPDATE `test` SET `strasse` = "?" WHERE `name` = "?"');
$statement->bind_param('ss',$strasse->Strasse(), $db->real_escape_string($name));
$statement->execute();
 
Versuch mal das ():

Wo kommt $strasse eigentlic her?

PHP:
echo "<pre>";
var_dump($strasse);
echo "</pre>";

$statement = $db->prepare('UPDATE `test` SET `strasse` = "?" WHERE `name` = "?"');
if( $statement )
{
  $statement->bind_param('s', $strasse->Strasse);
  $statement->bind_param('s', $name);
  $statement->execute();
}
else
{
  echo "Some error occured" . $db->error;
}

Grundsätzliches OOP mal für dich:

PHP:
function debug($var)
{
   echo "<pre>Inhalt von var:\n";
   var_dump($var);
   echo "</pre>";
}

class myClass
{
    private $name;   // Nur intern zugreifbar
    public $phone;   // Von überall aus zugreifbar

    public function __construct()
    {
       $this->name = "Hans Müller";
       $this->phone = "12345 - 67890";
    }

    public function setName($name)
    {
       $this->name = $name;
    }

    public function getName()
    {
       return $this->name;
    }
}

$obj = new myClass();

debug( $obj );

$obj->phone = "09876 - 54321";    // Das funktioniert
$obj->name = "Lieschen Maier";    // Das nicht!
$obj->setName("Friedrich Kaiser");  // Das funktioniert wieder

debug($obj);

Wenn du $strasse->Strasse() schreibst, dann müsstest du ein Objekt haben, was eine public Methode "Strasse()" implementiert. Bei Result-Sets aus der Datenbank wirst du sowas in der Regel nicht haben, es sei denn, du hast das Result-Set-Objekt selbst definiert und bei der Rückgabe werden die entsprechenden Methoden im Objekt angeboten. Das wäre dann sehr nah am MVC-Prinzip, bei dem ein Model eine Abstraktion der Datenbank-Tabelle bzw. eines Datensatzes aus der Tabelle ist. In der Regel wirst du aber (vor allem bei mysqli) ein flaches Objekt bekommen, was nur Properties aber keine Methoden (sog. Getter und Setter) anbietet, um die Daten rauszuholen.

Wenn dir das jetzt noch zu kompliziert ist, solltest du vielleicht erstmal mit einfachen Objekten rumspielen, um ein Gefühl für OOP zu bekommen. Oder auch die passenden Fragen stellen. ;-)
 
Statement wäre ein Objekt, wenn es fehlerfrei wäre(was nicht der Fall ist).

Bevor wir lebende Debugger für dich werden, sei dein Augenmerk auf mysqli_error gelenkt.
Das sagt dir, welcher Fehler aufgetreten ist, wenn einer aufgetreten ist.
Das will ich auch nicht :/
ich habe error_reporting E_ALL drinnen.
außerdem heißt die meldung
Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statemen
Was für mich heißt das eine variable fehlt. beim durchzählen kommt man aber auch nur auf zwei...
PHP:
$statement = $db->prepare('UPDATE `test` SET `strasse` = "?" WHERE `name` = "?"');$statement->bind_param('ss',$strasse->Strasse(), $name);$statement->execute()or die($db->error);
Das real_escape_string kann man ja weg lassen da es das bind_param übernimmt.
Der eintrag von </span>
PHP:
$statement->execute()or die($db->error);
P.s: wenn ich das or die($db->error);  an der Falschen stelle eingetragen habe, macht nichts. Ich habe es über all schon hingesetzt..
Hinter das $db->prepare sowie auch hinter $statement->bind_param. 
Ich habe die 3 varianten auch noch mit or die($statement->error);
spuckt überhaupt nichts aus
</div></div>

Die classe schaut so aus ich habe auch schon Überprüft ob diese etwas ausgibt.
PHP:
class SpielerWerte {
  private $punkte=0;
  private $rank='';
  private $spieler = '';
  function RangRechnungDbA($gesamtpunkteW,$playerW)
  {
    echo "<br />Willkommen in der Funktion";
    $this->punkte = $gesamtpunkteW;
    $this->spieler = $playerW;
    if($this->punkte<500)
    {
      $this->rank = "D-";
      
    }...
}
   function DieRangAusgabe()
    { 
      return $this->rank;
    }
}
also müsste ich mit dem aufruf
PHP:
  $SpielerWertW = new SpielerWerte();
  $SpielerWertW->RangRechnungDbA($gesamtpunkteW,$gewinnerName);
  $SpielerWertW->DieRangAusgabe();
den Wert bekommen
somit schaut die SQL so aus
PHP:
$SiegerRUpdate = $db->prepare('UPDATE `1n1_player` SET `Rank` = "?"  WHERE `playername`="?"');
if( $SiegerRUpdate )
{
  $SiegerRUpdate->bind_param('s', $SpielerWertW->DieRangAusgabe());
  $SiegerRUpdate->bind_param('s', $gewinnerName);
  $SiegerRUpdate->execute();
}
else
{
  echo "Some error occured" . $db->error;
}
Aber auch in diesem fall geht er nicht in die else sondern bleibt dann einfach hängen mit der Begründung.
Number of variables doesn't match number of parameters in prepared statemen
Diese Meldung erscheint für beide parameter.
 
Zuletzt bearbeitet:
Wie schon in meinem Post weiter oben: Gibt es $strasse->Strasse() wirklich? Also existiert diese Methode in dem Objekt $strasse? Was ist $strasse überhaupt bzw. wo kommt es her? Welche Klasse wird dafür verwendet? Kurz gesagt: Mach mal ein var_dump() auf dieses Objekt. Wie das geht, siehst du in meinem Post weiter oben.
 
Zurück