Cześć Próbuję nauczyć się właściwego sposobu korzystania z przygotowanych sprawozdań, aby uniknąć zastrzyki SQL itpPHP UPDATE przygotowane oświadczenie
Kiedy wykonać skrypt dostaję wiadomość od mojego skryptu mówiąc 0 Wiersze włożeniu Spodziewam to znaczy 1 rzędy wstawione i oczywiście zaktualizować tabelę. Nie jestem do końca pewien na moje przygotowane oświadczenie, ponieważ przeprowadziłem pewne badania i mam na myśli, że różni się on od przykładu do przykładu.
Kiedy aktualizuję swój stół, muszę zadeklarować wszystkie pola lub czy wystarczy zaktualizować jedno pole?
Każda informacja byłaby bardzo pomocna.
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>
klas/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);
}
}
Czy próbowałeś zobaczyć, co się dzieje? –
real_escape_string() nie jest konieczne dla przygotowanych instrukcji. – Danijel
W twoim SQL pierwszy parametr jest treścią, a drugi jest identyfikatorem. Kiedy wywołujesz bind_param, zmieniłeś kolejność - spróbuj zamienić kolejność w bind_param – andrewsi