【问题标题】:How do I use a UDF in PHP PDO如何在 PHP PDO 中使用 UDF
【发布时间】: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() 的函数?在同一个文件中,在同一个代码块中?

标签: php mysql user-defined-functions


【解决方案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 中的函数。
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2018-01-24
  • 2019-04-09
  • 2016-05-26
  • 2016-07-25
相关资源
最近更新 更多