bindColumn、bindParam與bindValue的區別


bindColumn:綁定一列到一個 PHP 變量(類似於list()函數為變量賦值)

<?php //連接數據庫函數
 functionconnect() { try { $dbh = new PDO("mysql:host=localhost;dbname=test",'root','root'); return $dbh; } catch(Exception $e){ echo $e->getMessage(); } } // 使用bindColumn讀取數據
 functionreadDataByColumn($dbh) { $sql = 'SELECT id,name FROM users'; # 讀取users表中id和name字段

try { $stmt = $dbh->prepare($sql); $stmt->execute(); /* 通過列號綁定,將ID這一列的值綁定到$id這個變量上 */

    $stmt->bindColumn(1, $id); /* 通過列名綁定,將name這一列字段的值綁定到$name這個變量上 */

    $stmt->bindColumn('name', $name); while ($row = $stmt->fetch(PDO::FETCH_BOUND)) { $data = $id . "\t" . $name . "\t"; echo"<pre>"; print $data; } } catch (PDOException $e) { print $e->getMessage(); } } $dbh = connect();       // 連接數據庫
 readDataByColumn($dbh); // 使用bindColumn讀取數據

?>

 

運行結果如下:

1 Michael 2 Andy 3        xiaoming

 

bindParam:綁定一個參數到指定的變量名(類似於占位符)

<?php //連接數據庫函數
 functionconnect() { try { $dbh = new PDO("mysql:host=localhost;dbname=test",'root','root'); return $dbh; } catch(Exception $e){ echo $e->getMessage(); } } // 使用bindColumn讀取數據
 functionreadDataByParam($dbh) { $num = 10; $username = '%m%'; $sql = 'SELECT id, name FROM users WHERE id < :num and name like :username'; try { $stmt = $dbh->prepare($sql);                              // 預處理

    $stmt->bindParam(':num', $num, PDO::PARAM_INT);           // 數字類型

    $stmt->bindParam(':username', $username, PDO::PARAM_STR); // 字符串類型

    $stmt->execute();                                         // 執行SQL語句

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {           // $row是一行,使用while依次輸出下一行

      $data = $row['id'] . "\t" . $row['name'] . "\t"; echo"<pre>"; print $data; } } catch (PDOException $e) { print $e->getMessage(); } } $dbh = connect();       // 連接數據庫
 readDataByParam($dbh); // 使用bindColumn讀取數據

?>

 

bindValue — 把一個值綁定到一個參數(與bindParam類似)

<?php //連接數據庫函數
 functionconnect() { try { $dbh = new PDO("mysql:host=localhost;dbname=test",'root','root'); return $dbh; } catch(Exception $e){ echo $e->getMessage(); } } // 使用bindColumn讀取數據
 functionreadDataByValue($dbh) { $num = 10; $username = '%m%'; $sql = 'SELECT id, name FROM users WHERE id < :num and name like :username'; try { $stmt = $dbh->prepare($sql);                              // 預處理

    $stmt->bindValue(':num', 10, PDO::PARAM_INT);             // 數字類型

    $stmt->bindValue(':username', '%m%', PDO::PARAM_STR);     // 字符串類型

    $stmt->execute();                                         // 執行SQL語句

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {           // $row是一行,使用while依次輸出下一行

      $data = $row['id'] . "\t" . $row['name'] . "\t"; echo"<pre>"; print $data; } } catch (PDOException $e) { print $e->getMessage(); } } $dbh = connect();       // 連接數據庫
 readDataByValue($dbh); // 使用bindColumn讀取數據

?>

 

bindParam和bindValue的區別

  1.  PDOStatement::bindParam不能綁定常量,而bindValue可以綁定常量 如 $stm->bindParam(":sex",$sex); //正確 $stm->bindParam(":sex","female"); //錯誤 $stm->bindValue(":sex",$sex); //正確 $stm->bindValue(":sex","female"); //正確
  1. bindParam 變量被以引用方式綁定到點位符上,而且僅僅當調用PDOStatement::execute()時才會去計算具體被綁定變量在PDOStatement::execute()被調用時的值. 例如,使用bindParam方式:
<?php $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(); // 將執行 WHERE sex = 'female'

 

使用bindvalue方式:

<?php $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(); // 將執行 WHERE sex = 'male'

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM