Haben Sie Probleme Einfügen und Aktualisieren von Tabellen in einer Datenbank mit vorbereiteten Anweisungen

StackOverflow https://stackoverflow.com/questions/652960

  •  19-08-2019
  •  | 
  •  

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?

War es hilfreich?

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top