gpt4 book ai didi

PHP循环替换字符串 "one-by-one"中的字符

转载 作者:行者123 更新时间:2023-11-30 00:38:36 37 4
gpt4 key购买 nike

存在参数数量未知(动态构建)的 MySQL 查询,其格式如下:

SELECT * FROM actions WHERE user1 = ? AND user10 = ? AND user11 = ? AND time = :time

由于我使用 PDO 准备好的语句,因此我无法在一个查询中混合命名参数和位置参数。所以我需要按顺序用命名参数替换所有问号。我有一个 Array() 来保存这些参数:

$parameters = Array();
$parameters['time'] = 1234567;

现在我需要用顺序命名参数替换每个问号,因此查询将如下所示:

SELECT * FROM actions WHERE user1 = :user0 AND user10 = :user1 AND user11 = :user2 AND time = :time

并且 $parameters 将包含其中的每个命名参数。我需要找到查询字符串中的每个“?”并循环出现的情况,将它们替换为递增字符串。在 JavaScript 中,我会使用正则表达式来查找 ? 并将它们传递给一个函数,该函数将有一个全局递增变量来跟踪当前的命名参数编号,但我不知道如何在 PHP 中执行此操作.

附注除了按顺序替换它们之外,我还需要向数组添加参数:

$parameters['user0'] = $user;
$parameters['user1'] = $user;
$parameters['user2'] = $user;

最佳答案

你正在做一些极其奇怪的事情。

首先,组合不同占位符的理由并不单一。就这样吧

AND time = ?

然后执行即可。

但是,如果您需要命名参数,请在构建查询的同时添加它们。显然,user1 = ?和用户 10 = ? AND user11 = ? 正在动态构建。为什么不同时添加命名占位符呢?

顺便说一句,如果您必须将相同的变量绑定(bind)到所有标记,那么只需对所有标记使用单个命名占位符

WHERE user1 = :user AND user10 = :user AND user11 = :user AND time = :time

然后关闭仿真模式,然后使用

执行
$stmt->execute(array('user'=>$user,'time'=>123));

关于PHP循环替换字符串 "one-by-one"中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21972527/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com