Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php (显然)很奇怪”;“拒绝访问”;MySQL错误_Php_Mysql - Fatal编程技术网

Php (显然)很奇怪”;“拒绝访问”;MySQL错误

Php (显然)很奇怪”;“拒绝访问”;MySQL错误,php,mysql,Php,Mysql,我刚开始开发一个遗留的PHP应用程序,发现自己正在与一种奇怪的行为作斗争。我将尝试解释场景/代码/错误: 所有查询都是通过一个打开的单例类执行的 一个连接,并在整个会话中保持打开状态(直到我 (我能理解代码) 每次mysql\u查询返回false,都会引发异常 许多查询执行得“很好”,甚至抱怨不存在表(我的任务之一是清理凌乱的clipper继承的数据库方案,因此我正在运行代码并根据需要创建表)。创建缺少的表后,查询通常运行良好 一些查询返回1045错误:用户'appuser'@'localhos

我刚开始开发一个遗留的PHP应用程序,发现自己正在与一种奇怪的行为作斗争。我将尝试解释场景/代码/错误:

  • 所有查询都是通过一个打开的单例类执行的 一个连接,并在整个会话中保持打开状态(直到我 (我能理解代码)

  • 每次
    mysql\u查询
    返回
    false
    ,都会引发异常

  • 许多查询执行得“很好”,甚至抱怨不存在表(我的任务之一是清理凌乱的clipper继承的数据库方案,因此我正在运行代码并根据需要创建表)。创建缺少的表后,查询通常运行良好

  • 一些查询返回
    1045
    错误:
    用户'appuser'@'localhost'的访问被拒绝(使用密码:是)

  • 下面是“奇怪”的行为:

  • 我已经在MySQL安装中启用了常规日志,但是没有提到拒绝访问错误。应用程序查询似乎运行良好(我说“似乎”,因为我在理解日志格式的某些部分时遇到了问题)

  • singleton类中配置的用户名/密码正常。我可以使用MySQL CLI界面登录,除此之外,许多其他查询运行良好。如果我试图在MySQL CLI上使用错误的用户名/密码,则拒绝访问将正确记录在常规日志中

  • 抛出异常的堆栈跟踪(显然是在PHP中)表明异常确实来自处理查询的singleton类

  • “拒绝”查询中似乎没有模式。它们是大型
    SELECT
    查询,但仅此而已。一些有
    左外
    连接,另一些有像24
    FROM
    子句

  • 我正在记录每个查询的
    mysql\u stat
    结果,它在正常查询和失败查询之前打印服务器状态。尽管如此,我不确定这个函数是否真正依赖于MySQL服务器的有效凭证/会话

  • 你们认为下面发生了什么?有线索吗?有没有受过教育的猜测


    如果有人需要更多信息/背景,我很乐意提供…:)

    更详细地检查有问题的
    SELECT
    s,我可以在它们之间找到一个公共表。你猜怎么着?实际上,它不是一个
    ,而是一个
    视图
    。当我试图使用图形工具(MySQL Workbench)从此
    视图
    中选择
    时,错误是明显的

    当开发人员导出数据库(MySQL转储)时,工具只是在每个
    视图上添加了这样一行代码:

    /*!50013 DEFINER=`oldappuser`@`%` SQL SECURITY DEFINER */
    
    我不知道为什么,但确实如此。因为我的本地数据库有不同的用户名/密码/方案,这成了我4小时头痛的根源

    为了修复它,我只删除了旧的
    视图
    ,并重新创建了它,而没有
    DEFINER
    指令


    这个故事的寓意是:在转储数据库时要注意检查的选项,并注意这些
    安全性
    内容,以防在新服务器中更改用户/pass/scheme。

    这些查询是否有可能尝试访问与join或from子句中正常数据库不同的数据库?