Problemi con l'inserimento e l'aggiornamento di tabelle in un database con istruzioni preparate

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

  •  19-08-2019
  •  | 
  •  

Domanda

Molto nuovo in PHP5 e presenta ancora alcuni problemi. Ho capito come selezionare con le istruzioni preparate ora cercando di inserire / aggiornare il mio codice è il seguente

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);
    }
}

L'errore che sto ricevendo è

  

Errore irreversibile: impossibile passare il parametro 4 per riferimento html / classes / mySQL.php sulla riga 43

Qualsiasi aiuto / riferimento sarebbe apprezzato. Grazie.


Tutti menzionano l'uso del DOP, avete qualche buon tutorial o esempio per favore?

È stato utile?

Soluzione 2

L'ho cambiato in

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);
    }
}

Fondamentalmente ho cambiato dove stava leggendo il ?? per l'intero a 0 nella query non l'ho associato.

Altri suggerimenti

non è $ descrip questo è il problema; sono gli 0 (parametri 4 e 5). la soluzione è passare variabili anziché interi:

 `$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"));`

evidentemente mysqli_bind_param vuole i suoi argomenti come riferimenti, quindi cerca dove sono archiviati nella memoria piuttosto che copiarne i valori. questo ha senso in quanto alcune delle cose che vorresti associare all'istruzione sql, come quell'immagine, sono probabilmente abbastanza grandi da farti preferire che non ci fossero copie in eccesso. letterali, stringhe o altro, non sono accessibili per riferimento. vedi: http://us.php.net/references

Non suggerisco di codificare con forza gli 0 nell'istruzione sql, poiché confonde inutilmente il tuo codice.

lasciami suggerire DOP, a proposito. la sua sintassi è molto più sana.

Non usare bind_param - È un'interfaccia non intuitiva e soggetta a errori, che è per lo più un'eredità dal C-api sottostante. Usa bind_value o meglio ancora - passa una matrice di valori come argomento per PDOStatement- > execute . Ad esempio:.

$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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top