php - PDO无法在Linux下运行查询

标签 php mysql linux windows pdo

我正在尝试为 VK 编写 OAuth 类,以便能够对我网站上的用户进行身份验证。我面临的问题是,我在 Windows 上编写的代码在 Linux 上根本不起作用。

我已经通过 PHP->PDO 脚本成功连接到我的 Linux 数据库,但问题是,我尝试执行的任何函数,我都无法获得响应或查询,什么也没有发生。

这是函数的示例:

Class Account
{
    private $Connection;
    private $ErrorHandler;
    private $Template;

    public function __construct()
    {
        global $DB, $Error, $Smarty;
        $this->Connection = $DB->DBConnection;
        $this->Template = $Smarty;
        $this->ErrorHandler = $Error;
    }
public function CheckDataWithVK($Username, $First_Name, $Last_Name, $Birth_Date)
{
        $StatementHandler = $this->Connection->prepare("SELECT username,email,first_name,last_name FROM account WHERE username LIKE :username OR first_name LIKE :fname AND last_name LIKE :lname");
        $StatementHandler->execute(array(':username' => $Username, ':fname' => $First_Name, ':lname' => $Last_Name));
        $Result = $StatementHandler->fetch(PDO::FETCH_ASSOC);
        if($Result['username'] == $Username)
        {
            $BuildUserNameArray = array('Username' => $Username, 'Email' => $Result['email'], 'Name'=> $Result['first_name'], 'Surname' => $Result['last_name']);
            return $BuildUserNameArray;
        }
        else
        {
            if($Result['first_name'] == $First_Name && $Result['last_name'] == $Last_Name)
            {
                $BuildCredentialsArray = array('Username' => $Result['username'], 'Email' => $Result['email'], 'Name'=> $First_Name, 'Surname' => $Last_Name);
                return $BuildCredentialsArray;
            }
            else
            {
                return false;
            }
        }
}

因此,在 Windows 上,我能够获取所有数据并检查用户是否存在于数据库中,但在 Linux 上则不行。

让我自私地说,我对这种事情很极客,但即使 PDO 也没有返回异常,所以我无法跟踪数据流和错误发生的位置。

我已经检查过日志,但似乎该语句甚至没有执行...

有什么帮助吗? 提前致谢

顺便说一句,我在我的所有网站上使用相同的类,并且只有一个行为像这样......是的,我三次检查了所有设置,一切都是正确的。 另外,我正在使用:

$this->DBConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

所以至少,如果有异常,我应该看到一些东西,但我什么也没看到 -> 没有异常

这是我的Database.Class.php:

public $DBConnection;
private $Template;

public function __construct($username, $password, $database)
{
    global $Smarty;
    $this->Template = $Smarty;
    try
    {
        $this->DBConnection = new PDO("mysql:host=127.0.0.1;dbname=".$database, $username, $password, array(PDO::ATTR_PERSISTENT => true));
        $this->DBConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {
        $message = $e->getMessage();
        $this->Template->assign('ErrorHeader', $this->Template->getConfigVars('DatabaseError'));
        $this->Template->assign('ErrorMessage', $e->getMessage());
        $this->Template->Display('ErrorHandler.tpl');
        echo "<!-- FreedomCore Servers: PDO Connection Error: $message -->\n";
        die();
    }
}

我的错,忘了提及......白痴...... 我可以插入值,但这个特定函数有问题

最佳答案

通过将服务器 PHP 库更新到 5.5.12 版本解决了问题。

在 Windows 上我一直使用 5.5.5,在 Linux 上使用 5.4.4,我认为导致问题的原因

关于php - PDO无法在Linux下运行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23573522/

相关文章:

PHPUnit 数据提供者错误

javascript - 使用 Javascript PHP MySQL 的在线考试计时器

php - 我在 php 中咨询时遇到困难

linux - 同一服务器上的两个 OwnCloud 实例

linux - 如何使用 SLURM 获取 GPU (GRES) 分配报告

java - 使用 php 或 java 打开 Edge 数据库连接

php - 我想简单地制作一个使用 zendframework2 连接到 mysql 数据库的对象

mysql - 如何创建MySQL触发器将一个表中新插入的数据复制到另一个表中

c# - 如何在 ASP.NET 网页中的每个类别前面显示记录数( Count )?

c++ - 我可以获得在键盘上按下某个键的时间量吗