2012-09-15 29 views
0

我在DB中有許多值,其中包含%s。我用PHP編寫了代碼來替換它們,但我需要一個查詢。可以在查詢中完成此操作。用於替換%s的mysql查詢

我的價值觀是一樣 的需求已經超出了所有人的預期%s,不幸的是,我們無法裝運%s附件中我們在上一封電子郵件中規定的時限。 %s我們期望您的訂單發貨%s

它可以有多個%s的實例。我想用%1 $ s代替第一次同意%2 $ s代替第二次並繼續。

我已經在我的代碼

if(preg_match_all('/(%s)/', $val, $match)) 

使用正則表達式,並在一個循環我這樣做

echo $val =str_replace("%s",'%'.++$j.'$s',$val,$count); 

但可這一切都通過一個單一查詢來完成?沒關係進行優化。

+0

只要將它與它傳遞給sprintf的,然後查詢數據庫。 – Zaffy

+0

MySQL實際上有一個替換方法,只是谷歌它,替換將替換所有出現的一個字符串與另一個。 BIG問題你需要可替換的內容是動態的(一個計數器),因此我建議創建並調用一個接收這兩個字符串並附加計數器的存儲過程。我相信它不會和你在php中做什麼有很大的區別 - 但是如果你只需要用$ s替換%s,那麼使用REPLACE將會快得多。 – Michael

+0

另外一個選擇是將內容輸出到文件,執行sed(shell命令)替換,並將其加載回來 – Michael

回答

0

您確定要這麼做嗎?你的數據庫似乎含有擬用作的第一個參數sprintf()printf()格式字符串:

$dbh = new PDO("mysql:dbname=$dbname;charset=utf8", $username, $password); 
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

$qry = $dbh->prepare('SELECT format_string FROM my_table WHERE string_id = ?'); 

$qry->execute([1234]); 
while ($row = $qry->fetch()) printf($row['format_string'], $s1, $s2, ...);