sql >> Database teknologi >  >> RDS >> Mysql

enkelte anførselstegn i SQL Query

mysql_real_escape_string() og sql-injektioner er allerede blevet nævnt.
Men lige nu skal dit script (omhyggeligt) blande sql-sætningen med dataene/parametrene og i næste trin skal MySQL-serveren adskille dataene fra sætningen.
Ved brug af (server-side) forberedte erklæringer begge "dele" af din forespørgsel sendes separat, og sql-parseren (af din MySQL-server) kan aldrig blive "forvirret" over, hvor sætningen slutter og dataene begynder.

php-mysql modulet kender ikke forberedte udsagn, men php-mysqli og BOB gør.

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

Det kan virke meget oppustet, hvis du kun bruger $stmt til én operation. Men overvej, at ellers skal du kalde mysql_real_escape_string() for hver parameter.



  1. loop mysql resulterer i php uden for mysql-forespørgslen

  2. slet række med ajax-funktion og php

  3. ORA-21700:objekt eksisterer ikke eller er markeret til sletning for Associative Array som inputparameter kaldet fra ODP.NET

  4. SQL-fejl (1215):Kan ikke tilføje en begrænsning af en fremmednøgle