Hallo Matthias,
Ich würde hier lieber die Parameter an
execute()
übergeben, das ist einfacher lesbar:$id_check -> execute(array(':BName' => $_POST['bname']));
Ist damit auch der Kontextwechsel abgesichert?
Ja. Das ist ein Shortcut für bindValue
.
bindParam
sorgt ja auch dafür, dass eben nicht mehrmysql_real_escape_string()
o. ä. verwendet werden muss oder sehe ich das falsch und das macht schon dasprepare
?
Das macht das Konzept der prepared statements mit placeholders, ja. Wobei bei PostgreSQL das gleiche Konzept auf für normale Statements existiert (Stichwort EXECUTE
). Das bindParam
ist nur ein Konzept, um prepared statements in Loops zu optimieren. Die Variablen werden via Referenz an den Parameter gebunden und können vor dem execute
nochmal geändert werden. Das erlaubt es, das bindParam
vor dem Loop einmal auszuführen und im Loop nur noch den Wert der Variablen zu ändern:
create table foo (bar int);
$db = new PDO("pgsql:host=localhost;dbname=test");
$bar = 0;
$stmt = $db->prepare("INSERT INTO foo (bar) VALUES (:bar)");
$stmt->bindParam(':bar', $bar);
for($bar = 0; $bar < 10; $bar++) {
$stmt->execute();
}
test=# select * from foo;
bar
-----
0
1
2
3
4
5
6
7
8
9
(10 rows)
LG,
CK