mysql_real_escape_string()
en sql-injecties
zijn al genoemd.
Maar op dit moment moet uw script (nauwgezet) de sql-instructie mengen met de gegevens/parameters en in de volgende stap moet de MySQL-server de gegevens van de instructie scheiden.
Gebruiken (server-side) voorbereide verklaringen
beide "delen" van uw zoekopdracht worden afzonderlijk verzonden en de sql-parser (van uw MySQL-server) kan nooit "in de war raken" over waar de instructie eindigt en de gegevens beginnen.
De php-mysql module kent geen voorbereide statements, maar php-mysqli en BOB doen.
$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();
Het lijkt misschien veel opgeblazen als je $stmt voor slechts één bewerking gebruikt. Maar bedenk dat je anders voor elke parameter mysql_real_escape_string() moet aanroepen.