Ciao Sto cercando di imparare il modo corretto di utilizzare le istruzioni preparate per evitare iniezioni SQL, eccPHP UPDATE preparato dichiarazione
Quando eseguo lo script ricevo un messaggio dal mio script dicendo 0 righe inserite, mi aspetto questo per dire 1 file inseriti e, naturalmente, aggiornare la tabella. Non sono completamente sicuro della mia dichiarazione preparata, dato che ho svolto alcune ricerche e intendo che varia da esempio a esempio.
Quando aggiorno il mio tavolo devo dichiarare tutti i campi o è giusto aggiornare solo un campo ??
Qualsiasi informazione sarebbe molto utile.
index.php
<div id="status"></div>
<div id="maincontent">
<?php //get data from database.
require("classes/class.Scripts.inc");
$insert = new Scripts();
$insert->read();
$insert->update();?>
<form action="index2.php" enctype="multipart/form-data" method="post" name="update" id="update">
<textarea name="content" id="content" class="detail" spellcheck="true" placeholder="Insert article here"></textarea>
<input type="submit" id="update" name="update" value="update" />
</div>
classi/class.Scripts.inc
public function update() {
if (isset($_POST['update'])) {
$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
$id = 1;
/* Bind our params */
$stmt->bind_param('is', $id, $content);
/* Set our params */
$content = isset($_POST['content']) ? $this->mysqli->real_escape_string($_POST['content']) : '';
/* Execute the prepared Statement */
$stmt->execute();
printf("%d Row inserted.\n", $stmt->affected_rows);
}
}
Hai provato per vedere cosa succede? –
real_escape_string() non è necessario per le istruzioni preparate – Danijel
Nel proprio SQL, il primo parametro è il contenuto e il secondo è ID. Quando chiami bind_param, hai invertito l'ordine: prova a scambiare l'ordine in bind_param – andrewsi