簡體   English   中英

用PHP中的數組元素替換重復字符

[英]Replace repeating character with array elements in PHP

我希望這是顯而易見的:我正在尋找用給定數組中的元素替換字符串中重復元素的最快方法,例如用於SQL查詢和參數替換。

$query  = "SELECT * FROM a WHERE b = ? AND c = ?";
$params = array('bee', 'see');

在這里我想替換實例嗎? 具有相應的有序數組元素,如下所示:

SELECT * FROM a WHERE b = 'bee' and c = 'see'

我看到可以使用preg_replace_callback完成此操作,但這是最快的方法還是我遺漏了一些明顯的東西?

編輯 :我已經在使用准備好的語句,實現上述目標。 我正在尋找一種方法來獲取原始查詢以顯示為調試輸出的一部分。

您在尋找准備好的陳述嗎?

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>

使用PDO進行SQL查詢 它執行參數化查詢,因此您無需滾動自己的方法。

有關更通用的方法,請參見sprintf() (該方法不會轉義數據以確保其安全,因此請勿將其用於數據庫訪問)。

我還將建議使用@David Dorward已經建議的PDO。 然后:

$stmt = $dbh->prepare('SELECT * FROM a WHERE b = ? AND c = ?');
$stmt->execute(array('bee', 'see'));

被問到之后發現了這一年。 對於尋找其他答案而不滿意的其他人。 這是我最終做的事情:

echo preg_replace(array_fill(0,count($params),'/\?/'),$params,$query,1);

注意:這純粹是為了調試,不會清除數據。

如果您知道每個參數的預期數據類型,則可以擴展此值,以在值周圍添加任何引號。 這些在使用sqlsrv_query($ conn,$ query,$ params)之類的東西時會自動創建;

我曾經在繼承的代碼庫中找到以下內容,我認為這是進行此類替換的一種巧妙方法:

function do_substitution($query, $params) {
    $params = array_unshift($params, $query);
    $query = call_user_func_array('sprintf', $params);

    return $query;
}

當然,您是用%s,%d等標記這種方式。

暫無
暫無

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

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