【问题标题】:PDO script with some errors有一些错误的 PDO 脚本
【发布时间】:2013-10-09 20:56:45
【问题描述】:

我的脚本有问题。 我收到此错误:致命错误:无法访问空属性

代码是:

public function insertap()

{

    try 
     {
         //echo $_POST['tranzactie'].$_POST['tip'].$_POST['tip_loc'].$_SESSION['uid'];
            $stmt=$this->$dbh->beginTransaction();
            $sql="INSERT INTO `anunturi` (`tranzactie`, `tip`, `tip2`, `user`) VALUES (:tranz, :tip, :tip_loc, :user)" ;
            $stmt->prepare($sql);
            $data = array('tranz' => $_POST['tranzactie'], 'tip' => $_POST['tip'], 'tip_loc'=>$_POST['tip_loc'], 'user'=>$_SESSION['uid']);
            $stmt->execute($data);
            $stmt->commit();
     }
    catch (Exception $e)
    {
            $stmt->rollback();
            echo "A aparut o eroare";
    }

}

提前谢谢...

【问题讨论】:

    标签: php pdo transactions


    【解决方案1】:

    改变

    $data = array('tranz' => $_POST['tranzactie'], 'tip' => $_POST['tip'], 'tip_loc'=>$_POST['tip_loc'], 'user' =>$_SESSION['uid']);

    $data = array(':tranz' => $_POST['tranzactie'], ':tip' => $_POST['tip'], ':tip_loc'=>$_POST['tip_loc'], ':user'=>$_SESSION['uid']);

    【讨论】:

    • 你给了我一个想法,现在脚本工作了......非常感谢
    • 我很高兴能回馈社区。确切的问题是什么?
    【解决方案2】:
    • 此 $dbh 未设置,因此它变为 $this->null->beginTransaction()。
    • beginTransaction() 返回一个 bool,因此 $stmt 变为 bool 而不是 PDOStatement

    -

    $stmt=$this->$dbh->beginTransaction();
    

    应该是这样的

    $this->dbh->beginTransaction();
    $sql = ...
    $stmt = $this->dbh->prepare($sql);
    

    用您的插入查询替换 ...。

    • 您不需要只针对一个查询进行交易。

    【讨论】:

    • 更改后调用非对象上的成员函数prepare()
    • @user2838459 是的 beginTransaction 返回一个布尔值。您实际上并不需要它来进行一次查询。
    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 2022-10-12
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    相关资源
    最近更新 更多