Mysql
 sql >> Datenbank >  >> RDS >> Mysql

einfache Anführungszeichen in der SQL-Abfrage

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.