php pdo在函数返回中准备

发布于 2024-09-18 10:54:50 字数 1091 浏览 3 评论 0 原文

不知怎的,我的执行语句说该对象没有成员“执行”。怎么了?

class EdlSqliteDb
{
const SQLITE_DRIVER = "sqlite:";

var $dbh;
var $qIndex = Array();

//
function EdlSqliteDb($dsn) 
{
    try 
    {
        $this->dbh = new PDO(self::SQLITE_DRIVER . $dsn);
    } 
    catch (PDOException $e)
    {
        echo "Error connecting: " . $e->getMessage() . ' ' . self::SQLITE_DRIVER . $dsn;
        die();
    }

    return;
}

//
function addQ($index,$q)
{
    $this->qIndex[$index] = $q;
}

//
function PrepareQ($index)
{
    try
    {
        $stmt = $this->dbh->prepare($this->qIndex[$index]);
    }
    catch (PDOException $e)
    {
        echo "Db Prepare Error: " . $e->getMessage();
        die();
    }
    return $stmt;
}

//
function DbExecutePrepared($index, $arrParameters)
{
    $stmt = $this->PrepareQ($index);
    if ($stmt->execute($arrParameters)) 
    {
        $row = $stmt->fetch();
        return $row;
    }
    else 
    {
        print "<p>dbquery(): database table update execute error</p>\n";
        die();
    }
}

}

Somehow my execute statement says the object has no member "execute". What is wrong?

class EdlSqliteDb
{
const SQLITE_DRIVER = "sqlite:";

var $dbh;
var $qIndex = Array();

//
function EdlSqliteDb($dsn) 
{
    try 
    {
        $this->dbh = new PDO(self::SQLITE_DRIVER . $dsn);
    } 
    catch (PDOException $e)
    {
        echo "Error connecting: " . $e->getMessage() . ' ' . self::SQLITE_DRIVER . $dsn;
        die();
    }

    return;
}

//
function addQ($index,$q)
{
    $this->qIndex[$index] = $q;
}

//
function PrepareQ($index)
{
    try
    {
        $stmt = $this->dbh->prepare($this->qIndex[$index]);
    }
    catch (PDOException $e)
    {
        echo "Db Prepare Error: " . $e->getMessage();
        die();
    }
    return $stmt;
}

//
function DbExecutePrepared($index, $arrParameters)
{
    $stmt = $this->PrepareQ($index);
    if ($stmt->execute($arrParameters)) 
    {
        $row = $stmt->fetch();
        return $row;
    }
    else 
    {
        print "<p>dbquery(): database table update execute error</p>\n";
        die();
    }
}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏了南城 2024-09-25 10:54:50

这很可能是由于准备工作失败造成的。

根据错误处理,PDO,可能只返回 false< /代码>

如果数据库服务器无法成功准备语句,PDO::prepare() 将返回 FALSE 或发出 PDOException(取决于错误处理)。

老实说,不完全确定此行为的定义位置......

更新: 在这里。默认行为是静默失败。您需要将 PDO::ATTR_ERRMODE 设置为 PDO::ERRMODE_EXCEPTION 才能始终引发异常。

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

This is most likely due to a failed preparation.

Depending on error handling, PDO, instead of raising an exception, may just return false .

If the database server cannot successfully prepare the statement, PDO::prepare() returns FALSE or emits PDOException (depending on error handling).

Not entirely sure where this behaviour is defined, to be honest....

Update: here it is. The default behaviour is to fail silently. You need to set PDO::ATTR_ERRMODE to PDO::ERRMODE_EXCEPTION for exceptions to be risen at all times.

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
月下伊人醉 2024-09-25 10:54:50

添加:

var_dump($stmt);

之后:

$stmt = $this->PrepareQ($index);

可能有问题,因此 $this->PrepareQ($index); 返回 null,或者返回一个没有 execute 方法的对象,< code>var_dump变量将有助于了解该变量是什么并调试此问题。

Add:

var_dump($stmt);

After:

$stmt = $this->PrepareQ($index);

Probably there's something wrong with it so $this->PrepareQ($index); is returning null, or an object that has no execute method, var_dumping the variable will help knowing what that variable is and debugging this issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文