如何使用从一个存储过程到另一个存储过程的值?

时间:2014-04-10 06:35:18

标签: php mysql wordpress stored-procedures

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

1 个答案:

答案 0 :(得分:1)

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

  

数组总是转换为字符串“Array”

因此PHP将"CALL AS('Array');"解释为要发送给MySQL的字符串,这显然是问题的根源。另请注意,允许PHP以这种方式将变量扩展为SQL命令 dangerous :请参阅@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,即使你 正确地序列化了数组,它也只能识别序列形式(这在你的{{1}中不易使用) }程序)。

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

尽管如此,这种安排确实是非常罕见的。通常人们会尝试这样的事情,因为他们试图使用SQL作为过程语言,而它是一种非常强大的声明性语言。如果你解释一下你的程序集体试图做什么,我非常怀疑有人能够编写一个SQL命令来完成整个过程。