簡體   English   中英

在PHP中使用mysqli中的REGEXP預處理語句

[英]Using REGEXP inside mysqli prepared statement in PHP

我試圖用這樣的(noob)代碼進行簡單的搜索過程:

$prep->prepare("SELECT * FROM details WHERE id REGEXP '?'");
$prep->bind_param("s", $search_query);

它給了我這個警告:

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement

我猜這可能是因為問號也用於RegExp(可選的前一個字符)。

有關如何在預准備語句中使用REGEXP(沒有沖突的問號)的任何想法?

謝謝。

取出周圍的單引號? 您的代碼應為:

$prep->prepare("SELECT * FROM details WHERE id REGEXP ?");
$prep->bind_param("s", $search_query);

就目前而言,你正在傳遞一個參數,但是? 在單引號中被視為字符串,而不是參數標記。

Ed回答的是正確的。

但是,如果您碰巧需要更復雜的正則表達式,則可以使用CONCAT創建表達式。

// Target SQL
//    SELECT * FROM `table` WHERE `field` REGEXP "value1|value2|value3";
// Target Prepared Statement SQL
//    SELECT * FROM `table` WHERE `field` REGEXP ?|?|?;
$sql = 'SELECT * FROM `table` '
     . 'WHERE `field` REGEXP CONCAT(?, "|", ?, "|", ?)';
$bindings = [$value1, $value2, $value3];

$prepStmt = $db->prepare($sql);
$prepStmt->execute($bindings);

暫無
暫無

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

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