Sto riprogettando un sito PHP / MySql che aveva circa 7 anni e aveva molte dichiarazioni MySql. Li avevo aggiornati tutti per usare MySqli, ma di recente ho sentito parlare di "istruzioni preparate", quindi ora mi chiedo se dovrei prendere il tempo per cambiare tutte le istruzioni MySqli per usare le istruzioni preparate.
Ad esempio, la maggior parte delle istruzioni mysql nel codice corrente seguono questo formato generale ...
$sql = "SELECT * FROM users
WHERE userid = '$userid'";
$getnotifyoption = mysqli_query($connection, $sql);
if (!$getnotifyoption ) {
die("Database query failed: " . mysqli_error());
} else {
while ($row = mysqli_fetch_array($getnotifyoption )) {
$firstname=$row['firstname'];
//etc
}
}
Ovviamente è un SELECT, ma ho anche molte istruzioni INSERT che seguono lo stesso formato generale. E se inserissi un nome nel database, lo farei per primo ...
$firstname=mysqli_real_escape_string($connection,$_POST['firstname']);
Dalla mia recente lettura, sembra che sia una buona cosa da fare, ma sicuramente non così sicuro da SQL injection come potrebbe / dovrebbe essere.
Ora sto leggendo delle dichiarazioni preparate e sto lottando per afferrarle completamente (se qualcuno ha qualche buon tutorial per qualche neofita, per favore condividi un link). E se qualcuno si sente generoso, fammi sapere come l'affermazione di esempio che ho dato in precedenza sarebbe stata riscritta usando una dichiarazione preparata. Ma a parte questo ...
Devo installare qualcosa per usare le istruzioni preparate, o funzionano semplicemente all'interno del mio ambiente mysqli / php7?
Ancora più importante, il feedback che sto cercando è se pensi che dovrei sicuramente aggiungere quello che penso sarebbe tempo significativo per la riprogettazione e tornare indietro e modificare TUTTE le mie istruzioni MySqli per utilizzare istruzioni preparate?
Quanto più efficiente / sicuro sono le dichiarazioni preparate rispetto al formato che uso sopra?
La mia strada è TERRIBILE, o è OK da usare per ora?
Alla fine la mia strada non funzionerà? Se è così, stiamo parlando di un anno o come 10 anni? (lo so probabilmente non posso rispondere :) :)