mysql_real_escape_string()
und SQL-Injektionen
wurden bereits erwähnt.
Aber jetzt muss Ihr Skript (mühsam) die SQL-Anweisung mit den Daten/Parametern mischen und im nächsten Schritt muss der MySQL-Server die Daten von der Anweisung trennen.
Using (serverseitig) vorbereitete Anweisungen
beide "Teile" Ihrer Abfrage werden separat gesendet und der SQL-Parser (Ihres MySQL-Servers) kann niemals "verwirrt" werden, wo die Anweisung endet und die Daten beginnen.
Der php-mysql Das Modul kennt keine vorbereiteten Anweisungen, aber php-mysqli und PDO tun.
$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();
Kann sehr aufgebläht erscheinen, wenn Sie $stmt nur für eine Operation verwenden. Aber bedenken Sie, dass Sie sonst für jeden Parameter mysql_real_escape_string() aufrufen müssen.