我会保持简短和快速。为我指出正确的方向或告诉我如何去做。
我有一个数组(如下所示) - 我希望能够替换 ? 的值与第二个数组中的元素。那么第一个?被数组 2 中的第一个值替换,依此类推。
我不会汇总自己的 PDO,并且代码库非常旧,目前没有使用 PDO。只需知道如何获取下面的数组并准备和绑定(bind)以使其成为快速 sql 语句:
Update tblA set name = 'SRTest12', agency = 'AUS', feature_tag = 'SRTest1', sart_date = '2000-01-01 00:00:00', end_date = '2050-12-31 00:00:00', ongoing = '0', hide = '1' where id = 165
变量转储输出
> array(2) {
> [0]=>
> string(126) "UPDATE tblA SET name = ?,agency = ?,feature_Tag = ?,start_Date = ?,end_Date = ?,hide_text = ?,ongoing =
> ? WHERE id = ?"
> [1]=>
> array(8) {
> [0]=>
> string(8) "SRtest12"
> [1]=>
> string(5) "AUS"
> [2]=>
> string(7) "SRTest1"
> [3]=>
> string(19) "2000-01-01 00:00:00"
> [4]=>
> string(19) "2050-12-31 00:00:00"
> [5]=>
> string(1) "0"
> [6]=>
> string(1) "1"
> [7]=>
> string(3) "165"
> }
> }
Print_r 输出
Array ( [0] => UPDATE tblA SET name = ?,agency = ?,feature_Tag = ?,start_Date = ?,end_Date = ?,hide_text = ?,ongoing = ? WHERE id = ? [1] => Array ( [0] => SRtest12 [1] => AUS [2] => SRTest1 [3] => 2000-01-01 00:00:00 [4] => 2050-12-31 00:00:00 [5] => 0 [6] => 1 [7] => 165 ) )
最佳答案
最直接的方法可能是带有计数器的 preg_replace_callback
:
$query = 'UPDATE...';
$data = ['foo', 'bar', ...];
$counter = 0;
$result = preg_replace_callback('/\?/', function () use (&$counter, $data) {
return $data[$counter++];
}, $query);
您还需要添加代码来转义/引用回调内 SQL 语法的值。为了完整起见,我可能还会添加一个检查 $data[$counter]
是否存在,如果不存在则抛出异常。
关于PHP 从数组构建语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31849262/