簡體   English   中英

PHP 在 bind_param 中內爆

[英]PHP implode in bind_param

我正在嘗試在 php 中創建高級搜索。 不需要輸入,用戶可以決定是要搜索制造商還是只設置最低價格等。我試圖將 bind_param 的“s”和“i”保存在數組中,以及變量在另一個數組中,然后將它們內爆到 bind_param 部分。 這就是我遇到問題的地方。 $params 內爆工作正常,但是當我嘗試內爆 $vars 數組時,我收到一條錯誤消息,上面寫着“只有變量應該通過引用傳遞”。 這是因為如果我將一個變量推送到我的數組中,它會存儲它的值而不是變量本身。 我嘗試將它們作為字符串推送,例如“$example”,但在這種情況下,當我將其內爆時,會收到相同的消息,因為它是一個字符串。 那么,我應該如何將它們存儲在數組中以便能夠在 bind_param 中使用它們?

在這個例子中,我只展示了 2 個輸入,但我還有更多。

if ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['search_button'])) {
    $params[] = "i";
    $vars[] = '$status';
    $sql_search = 'SELECT m.*, u.premium, u.avatar FROM motorcycles m INNER JOIN users u ON u.id = m.userid WHERE status = ?';

    if (isset($_GET['manufacturer_search']) && $_GET['manufacturer_search'] !== "") {
        $manufacturer_search = $_GET['manufacturer_search'];
        $sql_search .= " AND manufacturer LIKE ?";
        array_push($params, 's');
        array_push($vars, '$manufacturer_search');
    }

    if (isset($_GET['min_price']) && $_GET['min_price'] !== "") {
        $min_price = $_GET['min_price'];
        $sql_search .= " AND price >= ?";
        array_push($params, 'i');
        array_push($vars, '$min_price');
    }

    $sql_search .= " ORDER BY u.premium DESC LIMIT ?, ?";
    array_push($params, 'ii');
    array_push($vars, '$this_page_first_result', '$results_per_page');


    $stmt_search = $link->prepare($sql_search);
    $stmt_search->bind_param(implode("", $params), implode(",", $vars));
    $stmt_search->execute();
    $result = $stmt_search->get_result();
}

您應該分別提供您想要的變量作為bind_params的最后一個參數,您所做的是創建一個包含所有變量的字符串並傳遞它。

改變

$stmt_search->bind_param(implode("", $params), implode(",", $vars));

$stmt_search->bind_param(implode("", $params), ...$vars );

PHP 將獲取$vars數組中的所有條目,並將它們作為 function 的單獨參數傳遞。

有關這方面的更多信息,請參閱bind_param文檔、PHP 在此處此處splat operator的介紹以及有關堆棧溢出的一些額外信息

暫無
暫無

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

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