从准备好的mysql查询中获取命名占位符

时间:2014-08-05 11:31:56

标签: php mysql prepared-statement query-parameters

鉴于PHP中已准备好的MySQL语句,如何从中选择命名的占位符?

例如,如果我准备的查询是

SELECT name, colour FROM fruit WHERE calories < :calories AND colour = :colour

INSERT INTO people (name, position, admin_level) VALUES (:name, :pos, 0) 

然后我想输出array(":calories",":colour")array(":name",":pos")

此功能似乎未在PHP网站上列出。有没有办法从准备好的声明中获取命名占位符?

1 个答案:

答案 0 :(得分:1)

您必须使用某种字符串操作来执行我认为您要求的操作。我知道没有标准的机制可以做到这一点。所以像这样: -

$q = 'SELECT name, colour FROM fruit WHERE calories < :calories AND colour = :colour';

$res = preg_match_all('/:[a-z]+/',$q, $matches);

print_r($matches[0]);

会生成这样的内容:

Array
    (
        [0] => :calories
        [1] => :colour
    )
)

请注意,我不是正则表达式专家,因此需要进行一些测试,以确保它不会破坏某些完整的查询。

经过一些研究后我找到了

或者,如果您在完成

后想要这些信息
->prepare()
->bindParams()
->execute()

并生成一个语句句柄,你可以使用: -

$stmt->debugDumpParams()

Link to the PHP Manual,我知道这个激进的想法,现在我们都学到了一些东西,因为我之前从未见过这个。