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