如何在 PHP PDO 中使用 UDF

Posted

技术标签:

【中文标题】如何在 PHP PDO 中使用 UDF【英文标题】:How do I use a UDF in PHP PDO 【发布时间】:2018-04-20 13:03:43 【问题描述】:

我正在将 Access DB 转换为 mysql,并且已经到了需要将全局模块 (.bas) 文件中的 Access 函数转换为 MySQL 的阶段。原始代码调用 'SELECT' 语句部分中的函数,因此我想创建等效代码并在 php 中的 SELECT 中调用它们。

我不需要在其他任何地方使用这些函数,因为它们非常特定于这个项目,所以我想从我在 PHP PDO 中编写的脚本/代码块中调用它们,我在其中查询 MySQL 表(SELECT , 从)。没有例子可以解释这一点;大多数假设您希望创建一个存储过程。我在哪里写这些可调用的 UDF? - 我正在使用我自己的类和方法文件。

【问题讨论】:

dev.mysql.com/doc/refman/8.0/en/adding-udf.html“要使 UDF 机制工作,函数必须用 C 或 C++ 编写,并且您的操作系统必须支持动态加载。” – 这发生在与php 或SQL 完全不同的级别......!? 我认为你的做法是错误的。尝试分离关注点。具有 php.ini 中的功能。在 sql 中有存储。因此,请制作执行所需查询的 php 函数。 对不起,我应该说得更清楚-我看到了一些示例,其中可以调用用户定义的函数,类似于您的 select 语句中的内部 mysql 函数。 @shawns 下面的答案显示了我要实现的功能代码,但是我在哪里编写名为 hello() 的函数?在同一个文件中,在同一个代码块中? 【参考方案1】:

可以考虑使用 MySQL FUNCTION。

https://dev.mysql.com/doc/refman/5.6/en/create-procedure.html

cmet中有比较复杂的例子,大家可以参考一下。

delimiter //
CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) DETERMINISTIC
BEGIN
    RETURN CONCAT('Hello, ',s,'!');
END
//

delimiter ;
SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world!  |
+----------------+
1 row in set (0.00 sec)

【讨论】:

谢谢肖恩 我把这个功能放在哪里??我可以弄清楚如何转换函数,但是我将在哪里编写函数 hello() 以便它可以在 PHP/PDO mysql 中编写的 SELECT 中调用?我把它放在同一个代码块中吗 放到 MySQL 中。您可以使用一些 MySQL GUI 工具来帮助您编辑 MySQL 中的函数。

以上是关于如何在 PHP PDO 中使用 UDF的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PDO 在 PHP 中获取结果数组?

如何使用 PDO 在 PHP 中获取结果数组?

如何使用 PDO 在 PHP 中绑定 bigint 值?

如何使用PDO在PHP中获取结果数组?

如何在 PHP PDO 中使用异步 Mysql 查询

如何在 PHP 中使用带有 PDO 的 MySQL 用户函数?