テスト目的でオフィスにlocalhost XAMPPサーバを実行します。私は旅行していると私はラップトップでいくつかの仕事をするだろうと決めたので、私はラップトップにXAMPPの新しいバージョンをインストールし、私のファイルをコピーして何かの理由で、私のデスクトップ上で1つを得る。非オブジェクトのrollback()メンバ関数への呼び出し
大きなものの1つは、自分のサイトの1つの単純なログインページです。
私がしようとすると、コードを実行するたびに、私は次のエラーを取得する:
Call to a member function rollback() on a non-object
私のコードは次のとおりです。
<?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ファイルにコピー...
「echo $ e-> getMessage();」の出力は何ですか?スクリプトを終了する前に、スクリプトを1行上に移動する必要があるかもしれません。 – JochenJung
@JochenJung - 出力はありません。また、上に移動すると何もしません。この関数は@ $ db-> rollback()という問題を解決しています。 – JM4
確かに上がって、あなたに別のメッセージを与えることができます。やってみました?あなたのエラーのためにtryブロックが失敗します。 $ db beeingは定義されていません(今見ているエラーメッセージ)。しかし今では、$ e-> getMessage()が表示されず、前の行でスクリプトが終了します。 – JochenJung