mysql_real_escape_string()
и sql инжекции
вече бяха споменати.
Но точно сега вашият скрипт (старателно) трябва да смеси оператора sql с данните/параметрите и в следващата стъпка MySQL сървърът трябва да отдели данните от оператора.
Използване (от страна на сървъра) подготвени отчети
и двете „части“ на вашата заявка се изпращат поотделно и sql анализаторът (на вашия MySQL сървър) никога не може да се „обърка“ относно това къде завършва изразът и къде започват данните.
php-mysql модулът не познава подготвени оператори, но php-mysqli и PDO направи.
$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();
Може да изглежда много надуване, ако използвате $stmt само за една операция. Но имайте предвид, че в противен случай трябва да извикате mysql_real_escape_string() за всеки параметър.