mysqli stmt 預處理的作用

2021-07-11 02:20:06 字數 2137 閱讀 7521

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...