我在办公室运行localhost XAMPP服务器以进行测试。我正在旅行并决定在笔记本电脑上完成一些工作,所以我在我的笔记本电脑上安装了新版本的XAMPP,复制了我的文件,但出于某种原因,我的笔记本电脑版本出现了不停的错误,我不知道我的桌面上有一个单独的。
其中一个重要的是我的一个网站的简单登录页面。
每次尝试运行代码时,都会出现以下错误:
调用成员函数rollback() 在非对象上
我的代码是:
<?php
session_start();
if( $_SERVER['SERVER_PORT'] == 80) {
header('Location:https://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]);
die();
}
try
{
$db = new PDO('mysql:host=localhost;dbname=DB', 'USER', 'PW');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$sql = $db->prepare("SELECT user, pw FROM table WHERE user=? AND pw=?");
$sql->execute(array($_POST['user'], $_POST['pw']));
$foundrows = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
$rows = $sql->fetchAll();
foreach($rows as $row) {
$username = $row[0];
$pw = $row[1];
}
$db->commit();
$db->NULL;
}
catch (PDOException $e)
{
$db->rollback();
echo $e->getMessage();
exit;
}
if ($foundrows == 1) {
(store stuff and exit to Page A)
} else {
(create error and return to login page)
}
?>
正如我之前所说的,我的桌面上运行没有问题(我在其他地方使用的几个实时网站)。 H正在发生什么?
注意:我认为它可能是我的PHP文件的不同配置,但我从我的桌面复制了php.ini文件,但仍然没有运气......
答案 0 :(得分:1)
您的代码表明$db->rollback()
失败,因为$db
尚未定义。我们来看看你的代码片段:
try
{
$db = new PDO('mysql:host=localhost;dbname=DB', 'USER', 'PW');
[snip]
}
catch (PDOException $e)
{
$db->rollback();
echo $e->getMessage();
exit;
}
我认为你的代码甚至没有超过catch
块中的第一个语句,即PDO
构造函数中抛出异常。要对此进行测试,请将echo $e->getMessage;
移到$db->rollback()
之上,或有条件地执行回滚:
catch (PDOException $e)
{
if ($db) {
$db->rollback();
}
echo $e->getMessage();
exit;
}
要更一般地解决这个问题,请仔细检查您的数据库设置 - 也许从一台服务器移动到另一台服务器时出错?