sql >> Base de Datos >  >> RDS >> Mysql

comillas simples en consulta SQL

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.