mysql_real_escape_string()
og sql-injektioner
er allerede blevet nævnt.
Men lige nu skal dit script (omhyggeligt) blande sql-sætningen med dataene/parametrene og i næste trin skal MySQL-serveren adskille dataene fra sætningen.
Ved brug af (server-side) forberedte erklæringer
begge "dele" af din forespørgsel sendes separat, og sql-parseren (af din MySQL-server) kan aldrig blive "forvirret" over, hvor sætningen slutter og dataene begynder.
php-mysql modulet kender ikke forberedte udsagn, men php-mysqli og BOB gør.
$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();
Det kan virke meget oppustet, hvis du kun bruger $stmt til én operation. Men overvej, at ellers skal du kalde mysql_real_escape_string() for hver parameter.