Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Việc sử dụng hàm cơ sở dữ liệu get_results () của WordPress có ngăn chặn việc tiêm sql không

Ok, như tadman đã giải thích, get_results không ngăn được cuộc tấn công tiêm sql.

cần sử dụng chức năng chuẩn bị.

Tôi đã viết lại đoạn mã trên để ngăn chặn việc tiêm sql:

global $wpdb;
$offset = (isset($_POST["moreSearchResults"])) ? $_POST["searchOffset"] : 0;

$querySearchVals = "
    SELECT DISTINCT post_title, ID
    FROM {$wpdb->prefix}posts
    WHERE (";

$sVals = array();
$sVals = explode(" ", $searchVal);

$lastIndex = intval(count($sVals)) - 1;
$orderByCaseVals = "";
for($i = 0; $i<count($sVals);$i++)
{
    $queryPrep = $wpdb->prepare(" post_title LIKE '%%%s%%' ", $wpdb->esc_like( $sVals[$i] ));
    $querySearchVals .= $queryPrep;
    if($i != $lastIndex)
        $querySearchVals .= " OR ";

    $queryPrep = $wpdb->prepare(" WHEN post_title LIKE '%%%s%%' THEN ($i + 2) ", $wpdb->esc_like( $sVals[$i] ));
    $orderByCaseVals .= $queryPrep;
}

$querySearchVals .= ") 
    AND {$wpdb->prefix}posts.post_type = 'post'
    AND post_status = 'publish' 
    ORDER BY CASE";

$queryPrep = $wpdb->prepare(" WHEN post_title LIKE '%%%s%%' THEN 1 ", $wpdb->esc_like( $searchVal ));
$querySearchVals .= $queryPrep;
$querySearchVals .= "
        $orderByCaseVals
    END
";

$queryPrep = $wpdb->prepare(" LIMIT %d, 12", $offset);
$querySearchVals .= $queryPrep . ";";



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mức độ liên quan của tìm kiếm toàn văn bản được đo bằng?

  2. Cách thay đổi số thứ tự bắt đầu trong Magento

  3. Làm thế nào để chuyển đổi DateTime thành một số trong MySQL?

  4. Làm thế nào để làm tròn xuống số nguyên gần nhất trong MySQL?

  5. Lấy dữ liệu từ hai bảng để tạo lịch sự kiện