PHP 从数组构建语句

标签 php mysql arrays pdo

我会保持简短和快速。为我指出正确的方向或告诉我如何去做。

我有一个数组(如下所示) - 我希望能够替换 ? 的值与第二个数组中的元素。那么第一个?被数组 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/

相关文章:

php - 从逗号分隔字段创建数组

php - 在 mysql 表中创建数组/列表并使用 PHP 提取它

php - Foreach 循环不会将 Quickbooks 中的所有记录插入 MySQL 数据库。

php - CronJobs 可以执行包含 Javascript 的 php 吗?如果否,还有其他选择吗?

php - 第 1 行的 CSV 输入中的列数无效错误

php - Include_once 打开流失败

mysql - Facebook user_id : big_int, 整数还是字符串?

MySQL-如何每天实现事件调度程序 + 从早上 8 点到晚上 10 点+ 每 15 分钟

c - 获取 void* 的大小以创建一个简单的通用动态分配数组 - C

arrays - Bash数组迭代方向和性能