1 /*php之sql注入 2 3 瀏覽器經過特殊的數據,影響了sql的執行,稱之爲sql注入。 4 '# 註釋後邊的內容 5 '--同上 6 ' or 1 or ' 直接登陸 7 8 字符轉義 9 轉義函數:mysql擴展提供的函數:mysql_real_escape_string(轉義的數據) 10 用於將參與到sql執行的數據,進行實施安全轉義。 11 12 在數據庫操做層加入 用戶傳入的sql語句並加以過濾,在進行數據庫操做,以此防止用戶的不肯定性數據影響了sql的查詢。 13 */ 14 15 /* 16 PDO 17 相似於,mysql的擴展。也是操做mysql服務器的方式。 18 隨着php的發展,php認爲pdo纔是操做數據的合理方式。 19 20 PDO:PHP DATA OBJECT 21 基於面向對象語法完成操做。 22 23 在使用pdo以前要在php.ini文件中開啓 extension=php_pdo_mysql.dll 24 擴展開啓。 重啓服務器,就能夠在phpinfo.php中查詢是否開啓啦。 25 26 27 建立一個數據庫鏈接的PDO實例 28 PDO:__construct 建立一個表示數據庫鏈接實例 29 PDO::__construct(string $dsn [,string $username [,string passowrd [,array options]]]) 30 31 dsn:數據源名稱 data source name,包含了請求鏈接到數據庫的信息。。 32 username 毋庸置疑 就是用戶名啦, 33 password 密碼。 34 driver_options 35 一個具體驅動的鏈接選項的鍵=>值 數組。 36 返回值:成功則返回一個PDO對象。 37 錯誤/異常 38 若是試圖鏈接請求的數據庫失敗,則pdo::__construct拋出一個pdo異常(PDOException) 39 */ 40 <?php 41 $dsn = 'mysql:host=127.0.0.1; port=3306; dbname=mytest'; 42 $username='root'; 43 $password='root'; 44 $options=array( 45 //屬性初始化命令 46 PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8' //初始化數據庫編碼 47 ); 48 49 //connect 50 $pdo = new PDO($dsn, $username, $password, $options); 51 52 $sql = "SELECT * FROM `article`"; 53 $result = $pdo->query($sql); //$result 是一個結果集對象 object(PDOStatement) 54 55 $sql = "DELETE FROM `article` WHERE `id` =1"; 56 //返回受影響的記錄 57 $result = $pdo->exec($sql); 58 59 $result->fecthAll(PDO::FETCH_ASSOC); //多條數據的查詢 60 $result->fetch(); //單條記錄的查詢 61 fetchColumn(); //獲取單個值查詢 62 63 //當實例化完PDO對象,pdo就自動完成數據庫鏈接。 64 /* 65 執行sql(結構化查詢語言) 66 67 PDO對象的方法: 68 結果集對象: query() ; 查詢類:select,show, desc 69 受影響的記錄數:exec() ; 非查詢類:insert,update, delete,表操做,庫操做 70 71 只要是執行失敗(sql出錯),都返回false 72 73 操做結果集對象 74 爲了獲取最終的數據。使用結果集對象的方法來完成。 75 獲取所有數據: 76 二維數組:fetchAll() 77 一維數組:fetch 78 字符串數據:fetchColumn() 79 80 能夠在fetchall和fetch中使用參數: 81 PDO::FETCH_ASSOC ,PDO::FETCH_NUM , PDO::FETCH_BOTH的方式, 82 獲取,關聯數組,索引數組,二者都。 83 84 PDO對象的經常使用方法 85 $pdo->query(); 86 $pdo->exec(); 87 $pdo->errorCode();// 錯誤狀態碼 88 $pdo->errorInfo();//錯誤信息 數組 89 執行失敗返回false 90 91 具體的錯誤狀態碼查詢手冊 92 $pdo->lastInsertID() //獲取最新生成的auto_increnement()的字段值,最新更新的id 93 $pdo->quote(); //轉義數據,並使用引號包裹。 94 所以,在使用pdo執行sql時,應該使用上面的方法進行sql語句過濾,防止sql注入, 95 sql-injection 96 PDO事務處理 97 $pdo->beginTransaction(); //開啓事務 98 $pdo->rollback(); //事務回滾 99 $pdo->commit(); //事務提交 100 $pdo->inTranaction(); //判斷是否處於事務中。 101 102 */