Я бы хотел предотвратить атаки SQL на этот фрагмент кода PHP (это всего лишь практическое упражнение в классе). Это можно легко использовать, установив @mail
равным чему-то вроде '); DROP TABLE PURCHASE; --
$db = new SQLite3 ($db_name);
$sql = sprintf ("INSERT INTO PURCHASE (quantity, name, password, mail)
VALUES ('%s', '%s', '%s', '%s')\n",
$Quantity, $Name, $Password, $Mail );
echo $sql;
if (!$db->exec ($sql)) {
throw new Exception($db->lastErrorMsg());
}
Я пытался предотвратить это, передавая параметры, подобные этому, но я получаю 500 Internal Server Error
$db = new SQLite3 ($db_name);
$sql = $db->prepare("INSERT INTO PURCHASE(quantity, name, password, mail)
VALUES (:Quantity, :Name, :Password, :Mail)");
$sql->bindValue(':Quantity', $Quantity, SQLITE3_TEXT);
$sql->bindValue(':Name', $Name, SQLITE3_TEXT);
$sql->bindValue(':Password', $Password, SQLITE3_TEXT);
$sql->bindValue(':Mail', $Mail, SQLITE3_TEXT);
echo $sql;
if (!$db->exec ($sql)) {
throw new Exception($db->lastErrorMsg());
}
Как я могу это исправить?