可以使用多種方式實現預處理:指的是在綁定數據進行執行的時候,可以有多種方式。
預處理語句中為變量
使用數組指定預處理變量
1、准備預處理語句(發送給服務器,讓服務器准備預處理語句)
PDOStatement PDO::prepare:類似exec將一條SQL語句發送給Mysql服務器
//PDO::prepare 能夠自動的准備一個預處理語句,用戶需要准備的只是預處理所要執行的語句
//需求:往學生表里循環插入10條記錄
//PDO的預處理能夠自動的將對應的以:開始的變量給記錄下來,實際發送給服務器的是“?”
$sql1 = "insert into pro_student values(null,:s_name,:s_num,:s_gender,:s_age,:c_id)";
2、發送預處理語句
$stmt = $pdo->prepare($sql1);
3、給預處理綁定數據
$arr = array(
':s_name' => '房祖名',
':s_num' => 'itcast0013',
':s_gender' => 0,
':s_age' => 28,
':c_id' => 2
);
4、執行預處理:將要操作的數據發送給預處理語句,再執行預處理語句
PDOStatement::execute([$array]):數組用來傳遞對應的參數
$stmt->execute($arr); //執行預處理
通過綁定變量
bindParam
bool PDOStatement::bindParam ( mixed $parameter
, mixed &$variable
[, int $data_type
= PDO::PARAM_STR [, int $length
[, mixed $driver_options
]]] )
在執行預處理之前,將之前預處理語句所指定的變量進行賦值
只能通過變量的形式進行賦值(引用傳值)
bindValue
bool PDOStatement::bindValue ( mixed $parameter
, mixed $value
[, int $data_type
= PDO::PARAM_STR ] )
執行與bindParam一樣
在執行預處理之前,將之前預處理語句所指定的變量進行賦值,或者直接將值作為參數進行綁定
$stmt->bindValue(':s_name','張三');
$stmt->bindValue(':s_num','itcast0015');
$stmt->bindValue(':s_gender',0);
$stmt->bindValue(':s_age',30);
$stmt->bindValue(':c_id',3);
bindParam與bindValue的區別
1、bindParam必須要先聲明變量,再使用變量;bindValue可以直接使用值
2、bindValue是一次性的(因為是值傳遞,若變量值改變了,則需要重新綁定bindValue),而bindParam可以無限使用(因為使用的引用傳值,一旦變量的值進行改變,那么對應的組織SQL語句時所用到的變量的值也跟着改變)
預處理語句中為?
使用數組指定預處理變量
通過綁定變量
此時,bindParam和bindValue綁定的時候,第一個參數都為數字,數字對應第幾個“?”