1.防止sql注入
很形象的乙個例子:
你要登入乙個**,上面讓你輸入使用者名字和密碼。那麼,假如你輸入的使用者名稱是 admin ,但是你不知道密碼,你就輸入了乙個 1' or '1' = '1 ,那麼,你就提交了兩個引數給伺服器。假如,伺服器拿這兩個引數拼sql語句:select t.* from ***_table twhere t.user_id = '/*param1*/'and t.password = '/*param2*/'那麼,你提交的兩個引數就使sql文變成了:select t.* from ***_table twhere t.user_id = 'admin'and t.password = '1' or '1' = '1'那麼,這個sql原來的校驗功能就被你繞過去了,你的這種行為就稱之為sql注入。
2.提高效率
乙個連線裡面執行多個select/insert等操作,統一的語句只在資料庫預編譯一次,每次php只傳遞引數,從而提高效率。
例子來自網上:
//建立mysqli物件方式
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');
//只能用函式來判斷是否連線成功
if(mysqli_connect_errno())
$mysqli->set_charset('utf8');
$sql = "insert into limove values(?, ?, ?)"; //語句一樣值不相同情況
/*//獲取stmt物件
$stmt = $mysqli->stmt_init();
//準備一條sql語句,放到伺服器端
$stmt->prepare($sql);
*///mysqli中有直接的方法可用
$stmt = $mysqli->prepare($sql);
//繫結引數
$stmt->bind_param('iss', $id, $name, $order); //iss表示型別是int,string,string
for($i=0;$i<5;$i++)
//最後id
ee($stmt->insert_id);
//影響的行數 注:最後一條執行的
ee($stmt->affected_rows);
//錯誤號
ee($stmt->errno);
//錯誤資訊
ee($stmt->error);
//stmt物件中可以看到更多的資訊
ee($stmt);
eee($mysqli);
//建立mysqli物件方式
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');
//只能用函式來判斷是否連線成功
if(mysqli_connect_errno())
$mysqli->set_charset('utf8');
$sql = "select * from limove where id<?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('i', $i);
$stmt->bind_result($a, $b, $c);
$i=40;
$stmt->execute();
//把結果都取過來
$stmt->store_result();
//獲取字段資訊
$result = $stmt->result_metadata();//只能獲取一些字段資訊
while($field = $result->fetch_field())
//$stmt->data_seek(2); //移動指標的位置,只有執行 store_result 後才能生效
while($stmt->fetch())||");
}//記錄的條數 ,只有執行 store_result 後才能生效
ee($stmt->num_rows);
ee($stmt);
$stmt->free_result();
$stmt->close();
PHP的擴充套件類 mysqli stmt 預處理類
mysqli和mysqli result能完成的功能 都可以使用mysqli stmt類開完成 1.編譯一次,使用多次,類似於儲存過程 2.引數化查詢,可防止sql注入 2 header content type text html charset utf8 3 4 mysqli new mysql...
mysql 預處理 MySQL的預處理技術
所謂的預處理技術,最初也是由mysql提出的一種減輕伺服器壓力的一種技術!傳統mysql處理流程 1,在客戶端準備sql語句 2,傳送sql語句到mysql伺服器 3,在mysql伺服器執行該sql語句 4,伺服器將執行結果返回給客戶端 這樣每條sql語句請求一次,mysql伺服器就要接收並處理一次...
c 預處理和預處理命令
預處理發生在編譯之前,預處理輸出的是乙個單一的檔案,這個檔案被送到編譯器,進行編譯。每條預處理命令都控制預處理器的行為。每條預處理命令佔據一行,有以下的格式 character 預處理命令 one of define,undef,include,if,ifdef,ifndef,else,elif,e...