PDOStatement::bindValue —
把一個值綁定到一個參數
綁定一個值到用作預處理的 SQL 語句中的對應命名占位符或問號占位符。
PDOStatement::bindParam —
綁定一個參數到指定的變量名
綁定一個PHP變量到用作預處理的SQL語句中的對應命名占位符或問號占位符。 不同於 PDOStatement::bindValue() ,此變量作為引用被綁定,並只在 PDOStatement::execute() 被調用的時候才取其值。
區別用代碼表示如下:
$sex = 'male'; $s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex'); $s->bindParam(':sex', $sex); // use bindParam to bind the variable $sex = 'female'; $s->execute(); // executed with WHERE sex = 'female'
$sex = 'male'; $s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex'); $s->bindValue(':sex', $sex); // use bindValue to bind the variable's value $sex = 'female'; $s->execute(); // executed with WHERE sex = 'male'
當$SEX,被再次賦值時,用bindvalue綁定的,其值還是最開始的值male,但用bindparam綁定的,因為只有在execute()被調用時才會取變量的值,而這時候變量的$sex的值已經由原來的male變成female了。