PHP PDO fetchAll 仅在本地主机上返回结果

问题描述 投票:0回答:1

好吧,我希望有人能帮助我解决这个问题,我认为这一定是简单的事情。我正在使用 Apache、PHP 和 MySQL 构建一个网站。该代码在本地主机上运行得很好,但当我建立网络连接(通过 IP)时则不然。

规格

  • Windows 10
  • 阿帕奇2.4.58
  • MySQL 8
  • PHP 8.3

问题

很简单,我正在执行一条 SQL 语句,它使用 fetchAll 返回结果。它在本地主机上完美运行并返回预期结果。从另一台计算机 (Windows 11) 通过 IP 地址访问同一站点/页面,查询返回空结果(由于空值,这会导致后续错误)。

代码

建立数据库连接的代码位于扩展PDO的对象中:

parent::__construct($this->getDSN(),$this->getConnector("user"),$this->getConnector("password"));
parent::setAttribute(parent::ATTR_ERRMODE,parent::ERRMODE_EXCEPTION);

发生 fetchAll 的代码:

public function fetchAll($style=\PDO::FETCH_ASSOC)
{
    try {
        $result = ($this->_queryType === self::SQL_SELECT ? $this->_statement->fetchAll($style) : null);
    } catch(\Exception $e) {
        print "DEBUG::".$e->getMessage();
    }
    return (!empty($result) ? $result : null);
}

采取的步骤:

Apache 日志文件没有显示明显的 PDO 相关错误。 access.log显示:

127.0.0.1 - - [02/Feb/2024:13:44:06 -0500] "GET /beliefs.php HTTP/1.1" 200 25
nnn.nnn.nn.nn - - [02/Feb/2024:13:44:12 -0500] "GET /beliefs.php HTTP/1.1" 200 25

数据库连接似乎完好无损,我将问题追溯到一行代码,但目前还不知道为什么会出现这种情况:

$result = ($this->_queryType === self::SQL_SELECT ? $this->_statement->fetchAll($style) : null);

您能提供的任何帮助将不胜感激。

更新

我转储了导致 fetchAll 执行的所有变量/对象的内容,包括 $this,只是为了确保它们都包含我认为它们包含的值。所有这些都符合我的预期,除了 $result 数组(对于非本地主机连接保持为空)。

还用我的手机(Android)进行了测试,看看它是否与 Windows 11 笔记本电脑隔离。没有骰子,结果与 Windows 11 相同。

php apache pdo localhost fetchall
1个回答
0
投票

好的,找到问题了。

底线,本地主机和客户端之间的 URL 不同,因为我是通过 IP 地址访问的。考虑一下:

"www.mywebsite.com/about.php" != "123.234.25.101/about.php"

我的解决方案的设计根据页面的 URL(上式左侧)检查数据库中给定页面的内容。因此,当我通过IP访问它时,它在数据库中找不到相应的记录。该解决方案按设计工作,但在这种情况下通过 IP 地址测试它是一个限制。

© www.soinside.com 2019 - 2024. All rights reserved.