我正在尝试为 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/