mysql_real_escape_string()
dan suntikan sql
telah disebutkan.
Tapi sekarang skrip Anda (dengan susah payah) harus mencampur pernyataan sql dengan data/parameter dan pada langkah selanjutnya server MySQL harus memisahkan data dari pernyataan.
Menggunakan (sisi server) pernyataan yang disiapkan
kedua "bagian" dari kueri Anda dikirim secara terpisah dan parser sql (dari server MySQL Anda) tidak akan pernah "bingung" tentang di mana pernyataan berakhir dan data dimulai.
php-mysql modul tidak mengetahui pernyataan yang disiapkan tetapi php-mysqli dan PDO lakukan.
$pdo = new PDO('mysql:host=localhost;dbname=test', '...', '...');
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $pdo->prepare('
UPDATE
Videos
SET
Title=:title ,
Preacher=:preacher ,
Date=:date ,
Service=:service ,
File=:file ,
Description=:description
WHERE
id=:id
');
$stmt->bindParam(':title', $_POST['title']);
$stmt->bindParam(':preacher', $_POST['preacher']);
$stmt->bindParam(':date', $_POST['date']);
$stmt->bindParam(':service', $_POST['service']);
$stmt->bindParam(':file', $_POST['file']);
$stmt->bindParam(':description', $_POST['description']);
$stmt->bindParam(':id', $_GET['id']); // really _GET?
$stmt->execute();
Mungkin tampak banyak mengasapi jika Anda menggunakan $stmt hanya untuk satu operasi. Tetapi pertimbangkan bahwa jika tidak, Anda harus memanggil mysql_real_escape_string() untuk setiap parameter.