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

标签 php mysql prepared-statement query-string

给定 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/

相关文章:

javascript - 显示瞬时选中的单选按钮的数量

mysql - R控制台中的错误字符编码

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - MySQL 带有可变大小变量列表的准备语句

PHP/MySQL 存储过程问题

php - Symfony2 Doctrine Qb STR_TO_DATE 未知函数

mysql - 从 Mysql 表中删除重复行并只保留一行

php - 如何在准备好的语句中使用sql函数

php - fatal error : Allowed memory size of 67108864 bytes exhausted

mysql - inner join 一张表中的两个外键