首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lastInsertId - PDO

lastInsertId - PDO
EN

Stack Overflow用户
提问于 2019-12-15 13:38:18
回答 1查看 108关注 0票数 0

大家好,在插入一条记录后,我想记录寄存器的最后一个ID,我正在使用PDO lastInsertId ()并写入一个$ _SESSION,但是我没有得到我的代码中缺少的东西,我有一条错误消息

代码语言:javascript
复制
<?php 
session_start();

define("SERVER", "localhost");
define("BASES", "databases");
define("USER", "userbases");
define("PASS", "******");

class Sql extends PDO {
    private $conn;
    public function __construct(){
            try {
                $this->conn = new PDO("mysql:dbname=".BASES.";host=".SERVER, USER, PASS);
        }catch (Exception $e) {
            echo "Database Error: ".$e->getMessage();
    }
        catch(Exception $e){
                echo "Generic error: ".$e->getMessage();
        }
    }

    public function query($rawQuery, $params = array()){
        $stmt = $this->conn->prepare($rawQuery);
        $this->setParams($stmt, $params);
        $stmt->execute();
        return $stmt;
    }

    public function query($rawQuery, $params = array()){
       $stmt = $this->conn->prepare($rawQuery);
       $this->setParams($stmt, $params);
       $stmt->execute();
       return $this->conn->lastInsertId(); //agreement by @dennisgon
   }

}

/* INSERT */

$query = "INSERT INTO User(Name,Email) VALUES ('Cledson Stefanato','teste@gmal.com');";
$txt = new Sql();
$txt->query($query);

$_SESSION["RECORD"] = $txt->lastInsertId();

echo "Recorded: ".$_SESSION["RECORD"];

?>

致命错误:未捕获错误:在/home/xxxx/index.php:24中对null调用成员函数lastInsertId()堆栈跟踪:#0 {main}在/home/xxxx/index.php第24行抛出

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-15 13:45:32

最后的lastInsertId()是PDO类上的一个函数,问题在于你的类返回了prepare function,我认为最好的方法是你必须在你的函数查询中返回lastInsertId(),如下所示

//-Conseld I按照我的建议使用了两个不同的类和函数进行了补充。

代码语言:javascript
复制
<?php
/*CONNECTION WITH DATABASES*/
define("SERVER", "localhost");
define("BASES", "databases");
define("USER", "userbases");
define("PASS", "******");

/*DATABASE AND FUNCTION CONNECTION CLASS*/
class QueryPDO extends PDO{

    private $conn;
    public function __construct(){
        $this->conn = new PDO("mysql:dbname=".BASES.";host=".SERVER, USER, PASS);
    }
    /*INSERT, UPDATE AND DELETE FUNCTION*/
    public function query($rawQuery, $params = array()){
        $stmt = $this->conn->prepare($rawQuery);
        $stmt->execute();
        return $this->conn->lastInsertId();
    }

}

/*DATABASE AND FUNCTION CONNECTION CLASS*/
class SelectPDO extends PDO{

    private $conn;
    public function __construct(){
        $this->conn = new PDO("mysql:dbname=".BASES.";host=".SERVER, USER, PASS);
    }
    /*LISTAR DADOS*/
    public function query($rawQuery, $params = array()){
        $stmt = $this->conn->prepare($rawQuery);
        $stmt->execute();
        return $stmt;
    }

    public function select($rawQuery, $params = array()):array{
        $stmt = $this->query($rawQuery, $params);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

}

/*INSERT - MAY ALSO USE WITH UPDATE AND DELETE*/
$query = "INSERT INTO User(
                Nome,
                Email
                ) VALUES (
                'Cledson A Stefanato',
                'txt@gmail.com'
                );";
$txt = new QueryPDO();

/*SESSION RECORD, LAST REGISTRATION*/
$_SESSION["RECORD"] = $txt->query($query);
echo "Recorded: ".$_SESSION["RECORD"];


/*LIST*/
$query = "SELECT * FROM Cadastro";
$txt = new SelectPDO();
$result = $txt->select($query);

//echo json_encode($result);
//echo var_dump($result);

foreach ($result as $dados){
?>
<div style="color: red; font-size: 15px">
    <?php
    echo $dados["Nome"]. "<br />";
    echo $dados["Email"]. "<br />";
    ?>
</div>
<?php } ?> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59341474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档