Haben Sie Probleme Einfügen und Aktualisieren von Tabellen in einer Datenbank mit vorbereiteten Anweisungen
Frage
Sehr neu zu PHP5 und haben einige Probleme noch. Ich habe herausgefunden, wie man Wählen Sie mit vorbereiteten Anweisungen nun versuchen, meinen Code einfügen / aktualisieren ist wie folgt
function input_lab_results($name, $image, $descrip) {
$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, ?, ?, ?, ?)";
if($stmt = $this->conn->prepare($query)){
$stmt->bind_param('sssiidd', $name, $image, $descrip, 0, 0, date("Ymd"), date("Ymd"));
$stmt->execute();
die();
} else{
die($this->conn->error);
}
}
Der Fehler Ich erhalte ist
Fatal error: Can not Parameter übergeben 4 durch Verweis html / classes / mysql.php on line 43
Jede Hilfe / Referenzen würde geschätzt. Danke.
Jeder ist mit PDO zu erwähnen, tun Sie Jungs haben keine gute Tutorials oder Beispiele hierfür bitte?
Lösung 2
Habe ich es zu
function input_lab_results($name, $image, $descrip) {
$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, 0, 0, ?, ?)";
if($stmt = $this->conn->prepare($query)){
$stmt->bind_param('sssdd', $name, $image, $descrip, date("Ymd"), date("Ymd"));
$stmt->execute();
die();
} else{
die($this->conn->error);
}
}
Im Grunde änderte ich, wo es das liest ?? für die ganze Zahl 0 in der Abfrage habe ich es nicht binden.
Andere Tipps
es ist nicht $descrip
das ist das Problem; es ist die 0s (Parameter 4 und 5). die Lösung ist Variablen übergeben, anstatt ganze Zahlen:
`$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, ?, ?, ?, ?)";`
$pat_doctor = 0;
$pat_resident = 0;
if($stmt = $this->conn->prepare($query)){
$stmt->bind_param('sssiidd', $name, $image, $descrip, $pat_doctor, $pat_resident, date("Ymd"), date("Ymd"));`
offenbar mysqli_bind_param will seine Argumente als Referenz, so dass es für aussieht, wo sie in einem Speicher gespeichert sind, anstatt zu kopieren ihre Werte. Dies macht Sinn, da einige der Dinge, die Sie in die SQL-Anweisung sind wahrscheinlich groß, wie das Bild haben genug binden möchten, dass Sie lieber nicht überschüssige Kopien haben herumlaufen. Literale, string oder auf andere Weise, sind durch Verweis nicht zugänglich. siehe: http://us.php.net/references
Ich schlage vor, nicht schwer, die 0er in die SQL-Anweisung Codierung, wie es Ihren Code unnötig verwirrt.
Lassen Sie mich PDO vorschlagen, übrigens. die Syntax ist viel vernünftigere.
Verwenden Sie bind_param
nicht - es ist ein sehr intuitiv und fehleranfällige Schnittstelle, die meist ein Erbe aus dem zugrunde liegenden C-api ist. Verwenden bind_value
oder besser noch - ein Array von Werten als Argument übergeben PDOStatement->execute
. Zum Beispiel:.
$query = "INSERT INTO pat_table (pat_name, pat_image, pat_descrip, pat_doctor, pat_resident, pat_create, pat_modify) VALUES (?, ?, ?, 0, 0, ?, ?)";
if ($stmt = $this->conn->prepare($query)) {
$stmt->execute(array($name, $image, $descrip, date("Ymd"), date("Ymd")));
die();
} else {
die($this->conn->error);
}