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