sql >> Database >  >> RDS >> Mysql

enkele aanhalingstekens in SQL Query

mysql_real_escape_string() en sql-injecties zijn al genoemd.
Maar op dit moment moet uw script (nauwgezet) de sql-instructie mengen met de gegevens/parameters en in de volgende stap moet de MySQL-server de gegevens van de instructie scheiden.
Gebruiken (server-side) voorbereide verklaringen beide "delen" van uw zoekopdracht worden afzonderlijk verzonden en de sql-parser (van uw MySQL-server) kan nooit "in de war raken" over waar de instructie eindigt en de gegevens beginnen.

De php-mysql module kent geen voorbereide statements, maar php-mysqli en BOB doen.

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

Het lijkt misschien veel opgeblazen als je $stmt voor slechts één bewerking gebruikt. Maar bedenk dat je anders voor elke parameter mysql_real_escape_string() moet aanroepen.



  1. Logische databaseback-ups met MySQL Shell

  2. Als PostgreSQL count(*) altijd traag is, hoe moet u dan complexe query's pagineren?

  3. mysql-wachtwoorden Verbinding maken met MySQL met PHP

  4. Optimale manier om gespecificeerde rijen te VERWIJDEREN uit Oracle