Mysql
 sql >> Base de données >  >> RDS >> Mysql

guillemets simples dans la requête SQL

mysql_real_escape_string() et injections SQL ont déjà été mentionnés.
Mais pour le moment, votre script doit (méticuleusement) mélanger l'instruction sql avec les données/paramètres et à l'étape suivante, le serveur MySQL doit séparer les données de l'instruction.
Utilisation (côté serveur) instructions préparées les deux "parties" de votre requête sont envoyées séparément et l'analyseur sql (de votre serveur MySQL) ne peut jamais être "confus" quant à l'endroit où l'instruction se termine et où les données commencent.

Le php-mysql le module ne connaît pas les instructions préparées mais php-mysqli et AOP faire.

$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();

Cela peut sembler beaucoup de ballonnement si vous utilisez $stmt pour une seule opération. Mais considérez que sinon vous devez appeler mysql_real_escape_string() pour chaque paramètre.