Wie immer sah ich mich um Best Practices mit PHP, und vorbereitete Aussagen scheint die Art von Sachen, die ich jetzt tun sollte, wie mit meinen geschlossenen Augen tun. Also habe ich mit einigen Beispielen angefangen, die ich gefunden habe.Mysqli Prepared Statement in bindParam() funktioniert nicht
Ich habe diesen Fehler bekommt, wenn das Skript ausgeführt wird:
Fatal error: Call to a member function bindParam() on a non-object in /opt/lampp/htdocs/phpSecurity/PreparedStatments/Insert-Multi-Binded-Params/Insert Simple Method.php on line 10
Hier den Code geht.
Insert Einfache Method.php
<?php
require_once '../config.php';
$stmt = $db->prepare("INSERT INTO coisas (nome, telefone, bi) VALUES (?, ?, ?)");
$nome = 'Fabio Antunes';
$telefone = 916810641;
$bi = 123093456;
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
$stmt->execute();
$stmt->close();
$db->close();
?>
config.php
<?php
$server_host = 'localhost';
$server_user = 'root';
$server_password = '';
$server_db = 'PreparedStatements';
$db = new mysqli($server_host, $server_user, $server_password, $server_db);
?>
Nicht sicher, was ich falsch hier tun, hat dieses ähnliches Beispiel bei php.net gefunden ist, Warum funktioniert nicht? PS: Ich denke, die mysqli-Verbindung ist nicht das Problem, weil ich es verwendet habe, um einige vorbereitete Anweisungen mit SELECT SQL-Befehlen zu machen. Und hat ziemlich gut funktioniert.
EDIT
Die Auflösung und warum.
Nun in der example ich sollte bind_param()
für jeden Wert in der Abfrage verwenden. Aber dank Bart konnte er das Problem mit meinem Code lösen.
Wo es:
$stmt->bindParam(1, $nome);
$stmt->bindParam(2, $telefone);
$stmt->bindParam(3, $bi);
es sein sollte:
$stmt->bind_param("sii", $nome, $telefone, $bi);
Nun für diejenigen, die sich fragen könnte, was "sii".
Gut bind_param für was ich sehe es bindet die "$ var" an jedes Fragezeichen "?" in Ordnung.
Also mit einem bind_param()
kann ich sie alle zur gleichen Zeit binden, und die normale Verwendung von bind_param()
erfordert, den Typ der Daten anzugeben, binded.
Mein erster Wert, der gebunden werden soll, ist $nome
ein String, der durch das "s" spezifiziert ist;
Und die anderen $telefone
und $bi
sind Integer für die er "ich" habe;
Für andere, die hier ein ähnliches Problem haben, geht es andere Datentypen (von php.net).
i = Integer;
s = String;
d = Double;
b = Blob;
Wenn jemand eine bessere Erklärung bitte posten Sie es oder kommentieren. So kann ich meine eigenen verbessern.
Danke.
Guter Vorschlag für Best Practice. Ich habe versucht, aber es hat das Problem nicht gelöst. Irgendeine andere Idee? –
$ stmt-> bind_param ("sii", $ nome, $ telefon, $ bi); Hat funktioniert. –
Gut zu hören Fábio. –