Test amacıyla bir localhost XAMPP sunucusunu ofisimde çalıştırıyorum. Seyahat ediyorum ve dizüstü bilgisayarımda bir iş yapmam gerektiğine karar verdim, böylece dizüstü bilgisayarımda XAMPP'nin yeni bir sürümünü yükledim, dosyalarımı kopyaladım ama bir nedenden ötürü, dizüstü bilgisayarımın üzerinde durmadığım hatalar oluyor. Masaüstümde bir tane olsun.Nesne olmayan bir öğe rollback() işlevini çağırın
Büyük sitelerden biri, sitelerimden biri için basit bir giriş sayfasıdır.
her zaman aşağıdaki hatayı alıyorum, denemek ve kod çalıştırmasına:
Call to a member function rollback() on a non-object
Benim kodudur:
<?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)
}
?>
Dediğim gibi, bu benim masaüstünde sorun olmadan çalışır (ve başka yerlerde kullandığım birçok canlı site). H ne oluyor?
Not: bu benim PHP dosyanın farklı yapılandırmalar olabilir ama doğru
"echo $ e-> getMessage();" ifadesinin çıktısı nedir? Belki de senaryo bittikten önce, bir satır yukarı almanız gerekir. – JochenJung
@JochenJung - çıktı yok, aynı zamanda, hiçbir şey yapmaz. işlev bir sorun @ $ db-> rollback(); – JM4
Harekete geçme, size daha fazla mesaj verebilirim. Denedin mi? Hatanız nedeniyle deneme bloğu hataları için. $ db beeing tanımlı değil (şimdi gördüğünüz hata mesajı) bunun bir sonucudur. Ama şimdi $ e-> getMessage() 'ı görmeyeceksiniz, çünkü betik daha önce satırda bitiyor. – JochenJung