mysql_real_escape_string()
y inyecciones de sql
ya se han mencionado.
Pero en este momento su secuencia de comandos (minuciosamente) tiene que mezclar la instrucción sql con los datos/parámetros y, en el siguiente paso, el servidor MySQL tiene que separar los datos de la declaración.
Usar (lado del servidor) declaraciones preparadas
ambas "partes" de su consulta se envían por separado y el analizador sql (de su servidor MySQL) nunca puede "confundirse" acerca de dónde termina la declaración y dónde comienzan los datos.
El php-mysql el módulo no conoce declaraciones preparadas pero php-mysqli y PDO hacer.
$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();
Puede parecer demasiado exagerado si usa $stmt para una sola operación. Pero considere que, de lo contrario, debe llamar a mysql_real_escape_string() para cada parámetro.