鉴于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网站上列出。有没有办法从准备好的声明中获取命名占位符?
答案 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,我知道这个激进的想法,现在我们都学到了一些东西,因为我之前从未见过这个。