我在通过 PHP 运行的存储过程中遇到了一些问题,而且我已经连续四天摸不着头脑了。也许你可以帮助阐明这一点。
简而言之:我在本地计算机 ( spcTest
) 上定义了一个存储过程。PHP 页面可以毫无问题地运行它,因此它返回一个单行记录集。当我在生产服务器上重新创建过程时,PHP 页面没有得到相同的结果。
我很确定这是一个权限问题,但我很难确定它。我可以通过 phpMyAdmin 访问生产服务器,这就是我运行所有创建脚本的地方。我还看到存储过程 spcTest 出现在生产中(使用SELECT * FROM ROUTINES
),我也可以成功更新它。
当我运行以下命令时:
SHOW GRANTS FOR triis@localhost;
这些是我分别在开发服务器和生产服务器上得到的结果:
~~~=== 在开发服务器上===~~~
GRANT ALL PRIVILEGES ON *.* TO 'triis'@'localhost' IDENTIFIED BY PASSWORD '*F05[~~(snip)~~]72'
GRANT ALL PRIVILEGES ON `tri_is`.* TO 'triis'@'localhost'
~~~=== 在生产服务器上===~~~
GRANT USAGE ON *.* TO 'triis'@'localhost' IDENTIFIED BY PASSWORD '*F05[~~(snip)~~]72'
GRANT ALL PRIVILEGES ON `tri_is`.* TO 'triis'@'localhost'
注意GRANT USAGE
开发端不存在的 -line 的差异。我已经阅读了 mySQL 文档,但可能错过了答案……简而言之,我的问题是:生产服务器上的权限是否如上所示,是否允许执行任何存储过程,包括spcTest
?
对我来说,用户似乎不triis
应该有执行权限,因为EXECUTE
没有特别提到 - 属性。但是看到-command 在生产和开发服务器(尤其是双方)SHOW GRANTS
上返回惊人相似的结果,我有点困惑为什么 PHP 代码只能在开发端工作。ALL PRIVILEGES
如果这被证明是生产中的权限问题,是否GRANT CREATE ROUTINE, EXECUTE ON * TO triis@'localhost'
有助于为此以及任何未来的存储过程提供执行权限?
谢谢你的时间!:)