bindParam和bindValue有什麼區別?

PDOStatement::bindParam()PDOStatement::bindValue()什麼PDOStatement::bindValue()php


#1樓

這是我能夠考慮的一些事項: 數據庫

  • 使用bindParam ,您只能傳遞變量; 沒有價值
  • 使用bindValue ,您能夠同時傳遞(值,顯然和變量)
  • bindParam只適用於變量,由於它容許參數經過「引用」做爲輸入/輸出給定(而且在PHP中,值不是有效的「引用」) :它對於(引用手冊的)驅動程序頗有用:

支持調用存儲過程,該存儲過程將數據做爲輸出參數返回,有些還做爲輸入/輸出參數發送數據並進行更新以接收數據。 spa

對於某些數據庫引擎,存儲過程能夠具備既可用於輸入(將PHP的值提供給過程的值)又可用於輸出(將值從存儲的proc返回至PHP)的參數; 要綁定這些參數,您必須使用bindParam,而不是bindValue。 .net


#2樓

答案在bindParam的文檔中: code

與PDOStatement :: bindValue()不一樣,該變量被綁定爲引用,而且僅在調用PDOStatement :: execute()時進行評估。 pdo

execute 文檔

調用PDOStatement :: bindParam()將PHP變量綁定到參數標記:綁定變量將其值做爲輸入傳遞,並接收其關聯參數標記的輸出值(若是有) 字符串

例: get

$value = 'foo';
$s = $dbh->prepare('SELECT name FROM bar WHERE baz = :baz');
$s->bindParam(':baz', $value); // use bindParam to bind the variable
$value = 'foobarbaz';
$s->execute(); // executed with WHERE baz = 'foobarbaz'

要麼 it

$value = 'foo';
$s = $dbh->prepare('SELECT name FROM bar WHERE baz = :baz');
$s->bindValue(':baz', $value); // use bindValue to bind the variable's value
$value = 'foobarbaz';
$s->execute(); // executed with WHERE baz = 'foo'

#3樓

對於最多見的目的,您應該使用bindValue

bindParam具備兩種棘手或意外的行爲:

  • bindParam(':foo', 4, PDO::PARAM_INT)不起做用,由於它須要傳遞一個變量(做爲參考)。
  • 在運行execute()以後bindParam(':foo', $value, PDO::PARAM_INT)會將$value更改$value字符串。 固然,這會致使可能難以捕獲的細微錯誤。

資料來源: http : //php.net/manual/en/pdostatement.bindparam.php#94711


#4樓

準備好的語句和存儲過程

使用bindParam經過一次綁定插入多行:

<?php

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();

#5樓

最簡單地將其視爲行爲記憶的方式(就PHP而言):

  • bindParam: 參考
  • bindValue: 變量
相關文章
相關標籤/搜索