Problemi con l'inserimento e l'aggiornamento di tabelle in un database con istruzioni preparate
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?
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);
}