PHP操作MySQL方式選擇?

來源:互聯網
上載者:User
之前從書上學習的Mysql操作方式一直都是大致如下的形式

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); $query = "select * from products where Category=\"$category\"";$data = mysqli_query($dbc, $query);while ($row = mysqli_fetch_array($data)) {...}

現在在別人的項目實現中發現了預先處理的方式

$stmt = $this->conn->prepare("SELECT password_hash FROM users WHERE email = ?"); $stmt->bind_param("s", $email); $stmt->execute(); $stmt->bind_result($password_hash); $stmt->store_result();

好吧 只是物件導向和面向過程2中實現方法罷了..大家無視掉吧

回複內容:

之前從書上學習的Mysql操作方式一直都是大致如下的形式

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); $query = "select * from products where Category=\"$category\"";$data = mysqli_query($dbc, $query);while ($row = mysqli_fetch_array($data)) {...}

現在在別人的項目實現中發現了預先處理的方式

$stmt = $this->conn->prepare("SELECT password_hash FROM users WHERE email = ?"); $stmt->bind_param("s", $email); $stmt->execute(); $stmt->bind_result($password_hash); $stmt->store_result();

好吧 只是物件導向和面向過程2中實現方法罷了..大家無視掉吧

你看的是教科書吧,哈哈~
只用pdo,不解釋~

對於有使用者輸出參數的查詢,直接拼接SQL語句然後query不安全,
查詢前應該用mysqli_real_escape_string轉義SQL語句中的特殊字元.
不過最好還是用prepare預先處理bind_param參數化查詢.

//pdo防注入,你值得擁有$pdo = new PDO("mysql:dbname=test",'root','');$sql = "SELECT * FROM  category";$stmt = $pdo->prepare($sql);$stmt->execute();// 以數組方式擷取結果,並遍曆結果while ($row = $stmt->fetch()) {    $categories[] = $row;}print_r($categories);

預先處理方式是通過增強擴充的Mysqli類實現的,它是MYSQL4.1以後才開始提供的功能,書上一般只會講預設的實現方式,這樣也便於初學者理解PHP串連MYSQL的方法,這本書如果有講預先處理肯定會提到的。

預先處理方式我是在做oracle的時候碰到的,當時就震驚了,企業級的資料庫就是這麼吊,後來才知道mysql也有的,不過確實建議使用預先處理來做資料庫操作

PHP有三種串連MySQL的方式: mysql_connect(), mysqli, pdo。

mysql_connect()官方已經不推薦使用了,安全性很差。

mysqli和pdo,兩種都可以預先處理,參數綁定,都能有效防範SQL注入等問題。更推薦使用PDO一些。因為PDO是一個資料庫抽象層,支援很多不同的資料庫驅動(方便以後更換);支援更友善的命名式變數綁定等。

而PHP因為曆史原因,很多庫提供了兩套使用方式:物件導向的,和面向過程的(函數的,C語言式),mysqli就有過程式和對象式兩種。
你給出的第一個例子,就是mysqli的過程式的,而第二種,是對象式的。

扯呢?
只有面向過程和面型對象的兩種實現?開啥子玩笑。
PDO的參數綁定以及預先處理讓傳統一大坨addslashes,mysql escape各種雜七雜八的過濾函數全部下崗了。
除了釜底抽薪地解決了sql注入問題外,然後就是綁定預查詢,在批量相似查詢時效率提高。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.