在PHP中实现一个简单的准备查询

Car*_*ers 6 php mysql callback prepared-statement

我正在尝试创建一个非常简单的数据库抽象,其中一部分使用准备好的查询.

现在,我有一个函数接受一个查询字符串和一个值数组,如下所示:

$query = "SELECT `first_name`, `last_name` FROM ::table_name WHERE `id` = :id"
$values = array(
    'table_name' = $this->table_name,
    'id' = $user_id,
);
Run Code Online (Sandbox Code Playgroud)

这将创建一个这样的查询:

SELECT `first_name`, `last_name` FROM `sometablename` WHERE `id` = '1234'
Run Code Online (Sandbox Code Playgroud)

我的问题是:
我正在使用preg_replace_callback从查询字符串中获取:: identifiers和:标识符,然后将其发送到清理函数.问题是,我还需要发送values数组,以便函数可以从regexp获取匹配,使用该键获取values数组中的项,转义值,将其包装在右引号中然后返回.

但我无法将任何额外信息传递给回调.我可以使用私有静态变量,但这非常hacky.

另一种方法是什么?

zom*_*bat 2

preg_replace()手册中各种评论建议的替代方案之一是与“e”修饰符一起使用作为正则表达式的一部分:

preg_replace("/pattern/e","strtoupper('\\1')",$subject);
Run Code Online (Sandbox Code Playgroud)

本质上,您正在指定要评估的代码。我认为这个评论有一个很好的例子,您可以创建函数,然后用一个小字符串来评估它,这允许您传递额外的参数:

preg_replace('/pattern/e',"your_function(\$array,\$foo,\$bar,\$etc)",$str);
Run Code Online (Sandbox Code Playgroud)