Rolf B: Fatal error: Uncaught Error: Call to a member function bind_param() on boolean

Beitrag lesen

Hallo Schreddern,

wenn du mich korrigieren willst, dann recherchiere in Zukunft besser und lese genauer.

Zur "Lösung": Was schrieb ich denn?

musst Du also prüfen, ob in $_POST['Wert'] einer der zum Überschreiben erlaubten Column-Namen steht. Das kann man mit in_array tun.

D.h. man verwende ein Array mit den erlaubten Spaltennamen. Für eine komplexere Lösung kann man eine Schemaabfrage auf die DB machen und prüfen ob ein bekannter Spaltenname angegeben wird, aber

es ist leichtfertig, einem Web-Anwender blindlings einen Update auf eine beliebige Spalte zu erlauben

Zum Hinweis auf String-Interpolation: Es ist richtig, dass der Zugriff auf einen nichtnumerischen Array-Key ohne String-Delimiter deprecated ist. In PHP 5 eine Notice, in PHP 7 eine Warnung, angekündigt als Error. ABER: "SET $_POST['Wert'] = '?'" ist ein Syntaxerror. Die simple syntax für string parsing gibt die Notation ohne Hochkomma ausdrücklich vor. Das war schon immer so, und auf der entsprechenden PHP.NET Seite steht nichts von Deprecation. Grund für die Deprecation ist, dass ohne Quotes ein define hineingrätschen kann. Aber string parsing ignoriert in der simple syntax defines. Die complex syntax verhält sich anders: "SET {$_POST[Wert]} = '?'" wäre falsch, hier würde ein define("Wert", "Blubb") beachtet werden, darum müssen hier Quotes hin: "SET {$_POST['Wert']} = '?'" ist richtig.

Ich will nicht sagen, dass PHP das gut macht. Die simple syntax enthält hier einen sehr unnötigen Quirk aus der Zeit, wo der PHP Parser zu dumm war für sowas. Aber es gibt zu viel Alt-Code, der nicht mehr laufen würde wenn man das ändert.

Rolf

--
sumpsi - posui - obstruxi