php串連Mysql 用stmt防注入如何進行模糊查詢

來源:互聯網
上載者:User
Q1:以下代碼是正確的嗎?即表名和列名也可以用參數化匯入嗎?

$sqlLink = init_mysql();$stmt = $sqlLink->stmt_init()$sql = 'SELECT ? FROM ?;';$stmt->prepare($sql);$stmt->bind_param("ss",'colA','tableA');$stmt->execute();

Q2:參數化防止注入,如何進行模糊查詢?
1.sql = 'SELECT * FROM tableA WHERE col LIKE \'%?%\'';
2.sql = "SELECT * FROM tableA WHERE col LIKE '%?%'";
3.sql = 'SELECT * FROM tableA WHERE col LIKE \'%'.'?'.'%\'';
以上方式我經過嘗試都不能使用,請問帶%模糊查詢如何書寫SQL的prepare語句?
有一種可行的方式如下:
sql = 'SELECT * FROM tableA WHERE col LIKE \'%'.$string.'%\'';
但是失去了防注入的意義,請問有沒有正確的方式給予我引導?:-D

回複內容:

Q1:以下代碼是正確的嗎?即表名和列名也可以用參數化匯入嗎?

$sqlLink = init_mysql();$stmt = $sqlLink->stmt_init()$sql = 'SELECT ? FROM ?;';$stmt->prepare($sql);$stmt->bind_param("ss",'colA','tableA');$stmt->execute();

Q2:參數化防止注入,如何進行模糊查詢?
1.sql = 'SELECT * FROM tableA WHERE col LIKE \'%?%\'';
2.sql = "SELECT * FROM tableA WHERE col LIKE '%?%'";
3.sql = 'SELECT * FROM tableA WHERE col LIKE \'%'.'?'.'%\'';
以上方式我經過嘗試都不能使用,請問帶%模糊查詢如何書寫SQL的prepare語句?
有一種可行的方式如下:
sql = 'SELECT * FROM tableA WHERE col LIKE \'%'.$string.'%\'';
但是失去了防注入的意義,請問有沒有正確的方式給予我引導?:-D

  1. 不能。

原來的prepare引入的目的,是為了先行編譯,產生執行計畫,從而提高效能。本意可不是為了防止sqlinject。如果table都沒有了,是無法先行編譯的。就沒有意義了。

  1. $sql = "SELECT * FROM tableA WHERE col LIKE CONCAT('%',?,'%')";

涉及到的是 PHP Binding a Wildcard 的知識。

補充:如果不bind parameter。可以直接拼接字串。對引入的參數,都做一個escape就安全了。(函數: mysql_real_escape_string)

$db = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, $pdo_options);$query = $database->prepare('SELECT * FROM table WHERE  name LIKE :name');$query->bindValue(':name', '%'.$name.'%', PDO::PARAM_STR);$query->execute();while ($results = $query->fetch()){   echo $results['name'];}
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.