PHP
PHP ist ein bisschen unorganisierter im Vergleich zu Perl. Die Standarderweiterung MySQL beherrscht keine Parameterisierung, aber die Erweiterung PostgreSQL schon:
$result = pg_query_params( $dbh, 'SELECT * FROM users WHERE email = $1', array($email) );
Hinweis: die Abfrage muss in einfachen Anführungszeichen stehen oder das $ muss maskiert werden, damit PHP nicht versucht, es als Variable zu analysieren.
Es sollte jedoch wohl eine Abstraktionsschicht verwendet werden. Die ODBC- und PDO-Erweiterungen unterstützen sowohl Parameterisierung und mehrere Datenbanken:
Mittels mysqli
Die Erweiterung MySQL Improved beherrscht Parameterbindung.
$stmt = $db->prepare('update people set name = ? where id = ?');
$stmt->bind_param('si',$name,$id);
$stmt->execute();
Mittels ADODB
Mit ADODB kann man in einem Methodenaufruf eine Anweisung vorbereiten, daran binden und sie ausführen.
$dbConnection = NewADOConnection($connectionString);
$sqlResult = $dbConnection->Execute(
'SELECT user_id,first_name,last_name FROM users WHERE username=? AND password=?',
array($_REQUEST['username'], sha1($_REQUEST['password'])
);
Mittels ODBC
$stmt = odbc_prepare( $conn, 'SELECT * FROM users WHERE email = ?' );
$success = odbc_execute( $stmt, array($email) );
Oder:
$res = odbc_exec($conn, 'SELECT * FROM users WHERE email = ?', array($email));
$sth = $dbh->prepare('SELECT * FROM users WHERE email = :email');
$sth->execute(array(':email' => $email));
Mittels PDO
So bindet man Parameter auf die ausführliche Weise.
$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', $user, $password);
$stmt = $dbh->prepare('INSERT INTO REGISTRY (name, value) VALUES (:name, :value)');
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// eine Zeile einfügen
$name = 'one';
$value = 1;
$stmt->execute();
Und auf eine kürzere Weise, sie zu übergeben.
$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', $user, $password);
$stmt = $dbh->prepare('UPDATE people SET name = :new_name WHERE id = :id');
$stmt->execute( array('new_name' => $name, 'id' => $id) );
