簡體   English   中英

mysqli vs msql 和 PDO 連接

[英]mysqli vs msql and PDO connection

我正在嘗試按照此處的教程制作基本的 cms: Cms Tut

在 Article.php 中,他使用 mysql_escape_string($order) 和 PDO 連接,現在已從 php 7 中刪除,我改為 mysqli_escape_string($order) 並以某種方式進行,但給出了 2 個參數的錯誤。 我是 php 新手,但在我搜索時,我認為問題出在 PDO 連接上,我不能將連接作為第二個參數。 有什么想法和想法嗎? 提前致謝。

這是代碼:

public static function getList( $numRows=1000000, $order="publicationDate DESC" ) {
   $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
   $sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles
           ORDER BY " . mysqli_escape_string($order) . " LIMIT :numRows";

   $st = $conn->prepare( $sql );
   $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
   $st->execute();
   $list = array();

   while ( $row = $st->fetch() ) {
     $article = new Article( $row );
     $list[] = $article;
   }

   // Now get the total number of articles that matched the criteria
   $sql = "SELECT FOUND_ROWS() AS totalRows";
   $totalRows = $conn->query( $sql )->fetch();
   $conn = null;
   return ( array ( "results" => $list, "totalRows" => $totalRows[0] ) );
 }

更新代碼后,通過創建一個mysqli連接,在瀏覽器中有這個錯誤:mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: No such host is known。

在服務器錯誤日志中還有這個:調用成員函數 real_escape_string() on boolean

更新代碼為:

public static function getList( $numRows=1000000, $order="publicationDate DESC" ) {
   $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
   $link = mysqli_connect(DB_USERNAME, DB_PASSWORD, DB_DSN);

   $sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles
           ORDER BY " . $link->real_escape_string($order) . " LIMIT :numRows";

   $st = $conn->prepare( $sql );
   $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
   $st->execute();
   $list = array();

   while ( $row = $st->fetch() ) {
     $article = new Article( $row );
     $list[] = $article;
   }

   // Now get the total number of articles that matched the criteria
   $sql = "SELECT FOUND_ROWS() AS totalRows";
   $totalRows = $conn->query( $sql )->fetch();
   $conn = null;
   return ( array ( "results" => $list, "totalRows" => $totalRows[0] ) );
 }

你需要選擇一個mysql_mysqli_PDO (不挑mysql_ )。

你不能混合PDOmysqli_

您不需要使用mysqli_escape_string來保護 PDO 免受 SQL 注入; 它有自己的方法(您已經將其用於nubRows !!)。

請參閱如何防止 PHP 中的 SQL 注入? 有關使用 PDO 處理特殊字符的指南。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM