给定 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 网站上似乎没有列出此功能。有什么方法可以从准备好的语句中获取命名占位符吗?
最佳答案
您将不得不使用某种字符串操作来完成我认为您所要求的操作。据我所知,没有标准机制可以做到这一点。所以像这样:-
$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 ,我知道这个想法很激进,现在我们都学到了一些东西,因为我以前也从未见过这个。
关于php - 从准备好的 mysql 查询中获取命名占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25137748/