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) );
Mach auf GitHub mit