php - 如何将一个存储过程中的值用于另一个存储过程?

标签 php mysql wordpress stored-procedures

例如 我有一个 SP,它在我调用 A1() 时给出结果; 我获取结果并存储在 $a 中。 但是当我调用另一个 SP CALL A2('$a');它没有执行。运行程序时显示 Array()

最佳答案

当您在 PHP 中编写 SQL 命令 "CALL A2('$a');" 时,解析器首先 expands double-quoted string literal 中的 $a 变量.但是,如 Converting to string 下所述:

Arrays are always converted to the string "Array"

因此 PHP 将要发送到 MySQL 的字符串解释为 "CALL AS('Array');",这显然是问题的根源。另请注意,允许 PHP 以这种方式将变量扩展到 SQL 命令中是危险的:请参阅 @deceze的博文The Great Escapism (Or: What You Need To Know To Work With Text Within Text)更好地理解这一点;然后 How can I prevent SQL injection in PHP?了解变量应该(通常)如何从 PHP 传递到 SQL。

但是,在这种情况下,修复并不是那么简单。由于 MySQL 没有数组 datatype ,即使您确实正确序列化数组,它也只能识别序列形式(这在您的 A2 过程中不容易使用)。

还应该注意的是,存储过程并不真正“返回”任何东西。虽然它们可以输出零个或多个结果集,但结果集不能用作另一个存储过程的输入。正常的解决方法是存储结果集(例如,在临时表中),然后根据需要访问它。

也就是说,这种安排确实是非常罕见的。通常人们尝试这样的事情是因为他们试图将 SQL 用作过程语言,而它是一种非常强大的声明性语言。如果您解释了您的过程共同尝试做什么,我非常怀疑有人能够编写一个 SQL 命令来完成整个事情。

关于php - 如何将一个存储过程中的值用于另一个存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22980300/

相关文章:

mysql - 根据年份更新数据

php - 根据 WooCommerce 中的自定义字段值将文本添加到订单摘要

php - 存储库-PHP

Mysql - 按百分比限制?

php - 如何让代码行接受单引号

MySQL。两张表,复制一列

linux - 递归查找同名文件

php - 在 WordPress 中将选项从后端传递到前端的最佳方法

php - WordPress 帖子元上传框中的 $_FILES 始终为空

php 使用 htaccess mod_rewrite 检查 file_exists() 是否存在