sql >> Databasteknik >  >> RDS >> Mysql

enstaka citattecken i SQL Query

mysql_real_escape_string() och sql-injektioner har redan nämnts.
Men just nu måste ditt skript (mösamt) blanda sql-satsen med data/parametrar och i nästa steg måste MySQL-servern separera data från satsen.
Använda (serversidan) förberedda uttalanden båda "delarna" av din fråga skickas separat och sql-parsern (av din MySQL-server) kan aldrig bli "förvirrad" om var satsen slutar och data börjar.

php-mysql modulen känner inte till förberedda uttalanden men php-mysqli och PDO 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();

Kan tyckas vara mycket uppsvälld om du använder $stmt för bara en operation. Men tänk på att annars måste du anropa mysql_real_escape_string() för varje parameter.



  1. Är det möjligt att tvinga radnivålåsning i SQL Server?

  2. Laravel 5 Eloquent:Hur får man rå sql som körs? (med bunden data)

  3. laravel errno 150 främmande nyckel begränsning är felaktigt utformad

  4. Felet "Du har redan en användbar anslutning" i Visual Studio 2015 som lägger till datakälla