本文目錄一覽:
- 1、PHP中用PDO向Mysql里輸入數據
- 2、如何使用PDO查詢Mysql來避免SQL注入風險
- 3、PHP如何讀取MYSQL數據庫的字段內容然後返回該行所有內容?
- 4、如何用pdo讀取數據生成靜態頁面
- 5、使用pdo連接mysql數據庫
PHP中用PDO向Mysql里輸入數據
PDO配置。打開php.ini配置文件,找到下圖所示的配置信息,去掉要啟用的PDO前面的「#」號即可。另外一種方式是直接在啟動的wampserver中找到php擴展中的php_pdo_db.lib選項,重啟wampserver服務器即可。
如何利用PDO連接數據庫。利用下面這條簡單的語句即可連接數據庫
$pdo = newPDO(“mysql:host=localhost;dbname=php100″,”root”,「 “);
其中具體參數介紹如下圖所示:
PDO中常用的函數及其解釋如下。
PDO::query()主要是用於有記錄結果返回的操作,特別是SELECT操作
PDO::exec()主要是針對沒有結果集合返回的操作,如INSERT、UPDATE等操作
PDO::lastInsertId() 返回上次插入操作,主鍵列類型是自增的最後的自增ID
PDOStatement::fetch()是用來獲取一條記錄
PDOStatement::fetchAll()是獲取所有記錄集到一個中
下面通過一個簡單的php代碼示例來具體介紹如何使用PDO進行數據庫操作。
?php
//連接數據庫
$pdo = new PDO(“mysql:host=localhost; dbname=member”, “root”,””);
//在表user_list中插入數據
$pdo-exec(“insert into user_list(uid, m_id, username, password) values(null,’3′,’testpdo’,’testpdo’)”);
//使用查詢語句
$sr = $pdo-query(“select * from user_list”);
//將查詢的結果循環輸出顯示
while($row=$sr-fetch()){
print_r($row);
}
?
如何使用PDO查詢Mysql來避免SQL注入風險
我把問題和贊同最多的答題翻譯了下來。提問:如果用戶的輸入能直接插入到SQL語句中,那麼這個應用就易收到SQL注入的攻擊,舉個例子:$unsafe_variable = $_POST[‘user_input’]; mysqli_query(“INSERT INTO table (column) VALUES (‘” . $unsafe_variable . “‘)”);用戶可以輸入諸如 : value’); DROP TABLE table;– ,SQL語句就變成這樣了:INSERT INTO table (column) VALUES(‘value’); DROP TABLE table;–‘)(譯者註:這樣做的結果就是把table表給刪掉了) 我們可以做什麼去阻止這種情況呢?回答:使用prepared statements(預處理語句)和參數化的查詢。這些SQL語句被發送到數據庫服務器,它的參數全都會被單獨解析。使用這種方式,攻擊者想注入惡意的SQL是不可能的。要實現這個主要有兩種方式:1. 使用 PDO:$stmt = $pdo-prepare(‘SELECT * FROM employees WHERE name = :name’); $stmt-execute(array(‘:name’ = $name)); foreach ($stmt as $row) { // do something with $row }2. 使用 Mysqli:$stmt = $dbConnection-prepare(‘SELECT * FROM employees WHERE name = ?’); $stmt-bind_param(‘s’, $name); $stmt-execute(); $result = $stmt-get_result(); while ($row = $result-fetch_assoc()) { // do something with $row }PDO需要注意的是使用PDO去訪問MySQL數據庫時,真正的prepared statements默認情況下是不使用的。為了解決這個問題,你需要禁用模擬的prepared statements。下面是使用PDO創建一個連接的例子:$dbConnection = new PDO(‘mysql:dbname=dbtest;host=127.0.0.1;charset=utf8’, ‘user’, ‘pass’); $dbConnection-setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);上面的例子中,錯誤報告模式並不是強制和必須的,但建議你還是添加它。通過這種方式,腳本在出問題的時候不會被一個致命錯誤終止,而是拋出PDO Exceptions,這就給了開發者機會去捕獲這個錯誤。然而第一行的 setAttribute() 是強制性的,它使得PDO禁用模擬的prepared statements並使用真正的prepared statements。這可以確保這些語句和值在被發送到MySQL服務器之前不會被PHP解析(這使得攻擊者沒有注入惡意SQL的機會)。儘管你可以使用可選的構造函數參數去設置 charset ,但重點需要注意的是小於5.3.6的PHP版本,DSN(Data Source Name)是默認忽略 charset 參數的。說明當你傳一個SQL語句做預處理時會發生什麼?它被數據庫服務器解析和編譯了。通過指定參數(通過之前例子中的 ? 或者像 :name 這樣的命名式參數)你告訴數據庫引擎你是想過濾它。接着當你調用 execute() 函數時,prepared statements會和你剛才指定的參數的值結合。在此重要的是,參數的值是和編譯過的語句結合,而非一個SQL字符串。SQL注入就是當創建被發送到數據庫的SQL語句時,通過欺騙的手段讓腳本去引入惡意的字符串。因此當你使用單獨的參數發送真實正確的SQL時,你就限制了被某些不是你真實意圖的事情而搞掛掉的風險。使用prepared statements 傳遞的任何參數都會被當做字符串對待(不過數據庫引擎可能會做一些優化,這些參數最終也可能變成numbers)(譯者註:意思就是把參數當做一個字符串而不會去做額外的行為)。比如在上面的例子中,如果 $name 變量的值是 ‘Sarah’; DELETE * FROM employees ,產生的結果是會去搜索”‘Sarah’; DELETE * FROM employees”這一整個字符串,最終的結果你也就不會面對的是一張空表了。使用prepared statements的另一個好處是,如果你在同一session中再次執行相同的語句,也就不會被再次解析和編譯,這樣你就獲得一些速度上的提升。
PHP如何讀取MYSQL數據庫的字段內容然後返回該行所有內容?
PHP 版本 = 5.2 的常用連接方法為
$link = mysql_connect(‘mysql地址/localhost’,’root’,’root密碼’);
mysql_select_db(‘db1’); //選擇一個數據庫
mysql_query(‘set names utf8’); // 設置下數據庫默認編碼,避免寫入/讀取亂碼
$res = mysql_query(‘select * from user’); // 執行sql 語句
$rows = array();
while($row = mysql_fetch_array($res)){
$rows[] = $row; // 循環 resouce 數據得到數組數據集合
}
print_r($rows); // 最後一步輸出數據列表
PHP 版本 = 5.3 的常用連接方法為PDO形式,當然也可以使用5.2的連接方法。(PDO需開啟 php_pdo_mysql 擴展)
$pdo = new PDO(‘mysql:host=地址/localhost;dbname=數據庫名’,’root’,’root密碼’);
$pdo-exec(‘set names utf8’);
$res = $pdo-query(‘select * from user’);
$rows = array();
while($row = $res-fetch()){
$rows[] = $row;
}
print_r($rows);
大家學習php途中,建議使用5.3 版本以上以獲得更好的php編程體驗。
所以推薦pdo形式連接數據庫,更安全快速。
如何用pdo讀取數據生成靜態頁面
工具/原料
電腦
WAMPServer(Window+Apache+MySQL+PHP集成開發環境,大家可以在網上下載)
方法/步驟
PDO配置。打開php.ini配置文件,找到下圖所示的配置信息,去掉要啟用的PDO前面的「#」號即可。另外一種方式是直接在啟動的wampserver中找到php擴展中的php_pdo_db.lib選項,重啟wampserver服務器即可。
如何利用PDO連接數據庫。利用下面這條簡單的語句即可連接數據庫
$pdo = newPDO(“mysql:host=localhost;dbname=php100″,”root”,「 “);
其中具體參數介紹如下圖所示:
PDO中常用的函數及其解釋如下。
PDO::query()主要是用於有記錄結果返回的操作,特別是SELECT操作
PDO::exec()主要是針對沒有結果集合返回的操作,如INSERT、UPDATE等操作
PDO::lastInsertId() 返回上次插入操作,主鍵列類型是自增的最後的自增ID
PDOStatement::fetch()是用來獲取一條記錄
PDOStatement::fetchAll()是獲取所有記錄集到一個中
下面通過一個簡單的php代碼示例來具體介紹如何使用PDO進行數據庫操作。
?php
//連接數據庫
$pdo = new PDO(“mysql:host=localhost; dbname=member”, “root”,””);
//在表user_list中插入數據
$pdo-exec(“insert into user_list(uid, m_id, username, password) values(null,’3′,’testpdo’,’testpdo’)”);
//使用查詢語句
$sr = $pdo-query(“select * from user_list”);
//將查詢的結果循環輸出顯示
while($row=$sr-fetch()){
print_r($row);
}
?
使用pdo連接mysql數據庫
看看是否支持pdo,因為默認的錯誤如果不顯示的話,就靠返回錯誤只能得到這個,pdo還是需要pdo_mysql來支持的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/282978.html