[英]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.