Forskellen på PDOStatement::bindParam() og PDOStatement::bindValue () og hvorfor binde sine parametre?
Jeg fandt denne tråd med samme spørgsmål:http://stackoverflow.com/questions/1179874/pdo-bindparam-versus-bindvalue
Men er stadig ikke helt sikker på jeg forstår hvornår man bruger hvad. Når jeg kigger på dokumenteringen på php.net så kan jeg ikke helt forstå forkellen andet end et '12'-tal (og hvad det så gør)?
Derudover er jeg ikke helt sikker på hvorfor det er godt binde sine parametre - hvad er det sker med ved hjælp af dette?
Læste dette på en anden tråd her på siden "at binde dine parametre, bl.a. for at sikre, at argumenterne har den ønskede type." - men hvad betyder det?
Håber nogen kan forklare mig dette.
bindParam:
<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>
bindValue:
<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindValue(':calories', $calories, PDO::PARAM_INT);
$sth->bindValue(':colour', $colour, PDO::PARAM_STR);
$sth->execute();
?>
Jeg spørger da jeg gerne vil bruge PDO prepared statements for at sikre mod SQL-injections. Så er denne metode korrekt for at gøre dette? (Se nedenstående)
require_once('connect.inc.php');
$conn = dbConnect('pdo');
//ID
$newsidfk = $_GET['news_id_fk'];
$commentsidfk = $_GET['comments_id_fk'];
$username = $_GET['username'];
if(!empty($_GET['username']))
{
// PDO prepared statement og binding
$stmt = $conn->prepare("DELETE FROM users_tbl WHERE users_tbl.username =:username");
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->execute();
header("location:prefs.php");
}
På forhånd tak