mysql_real_escape_string()
i wstrzykiwanie sql
już wspomniano.
Ale w tej chwili twój skrypt (z trudem) musi wymieszać instrukcję sql z danymi/parametrami, a w następnym kroku serwer MySQL musi oddzielić dane od instrukcji.
Używając (po stronie serwera) przygotowane wyciągi
obie "części" zapytania są wysyłane oddzielnie, a parser sql (serwera MySQL) nigdy nie może się "pomylić" co do tego, gdzie kończy się instrukcja, a gdzie zaczynają się dane.
php-mysql moduł nie zna przygotowanych instrukcji, ale php-mysqli i PDO zrobić.
$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();
Może wydawać się dużym rozdęciem, jeśli używasz $stmt tylko do jednej operacji. Ale weź pod uwagę, że w przeciwnym razie musisz wywołać mysql_real_escape_string() dla każdego parametru.