2012-09-15 28 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, ...);