mysql_real_escape_string ()
và tiêm sql
đã được đề cập.
Nhưng ngay bây giờ tập lệnh của bạn (cẩn thận) phải trộn câu lệnh sql với dữ liệu / tham số và trong bước tiếp theo, máy chủ MySQL phải tách dữ liệu khỏi câu lệnh.
Sử dụng (phía máy chủ) báo cáo chuẩn bị
cả hai "phần" của truy vấn của bạn đều được gửi riêng và trình phân tích cú pháp sql (của máy chủ MySQL của bạn) không bao giờ có thể "nhầm lẫn" về nơi kết thúc câu lệnh và bắt đầu dữ liệu.
php-mysql mô-đun không biết các câu lệnh đã chuẩn bị nhưng php-mysql i và PDO làm.
$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();
Có thể hơi quá nếu bạn chỉ sử dụng $ stmt cho một thao tác. Nhưng hãy cân nhắc rằng nếu không, bạn phải gọi mysql_real_escape_string () cho mỗi tham số.