簡體   English   中英

lastInsertId - PDO

[英]lastInsertId - PDO

大家好,插入記錄后我想記錄寄存器的最后一個 ID,我正在使用 PDO lastInsertId () 並寫入 $_SESSION,但我沒有得到代碼中缺少的內容 我有一條錯誤消息

<?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} 在第 24 行的 /home/xxxx/index.php 中拋出

last lastInsertId() 是 PDO 類上的一個函數,問題是在你的類中你返回 prepare 函數,認為最好的方法是你必須像這樣在函數查詢中返回 lastInsertId()

//---------------Conseld 我按照我的建議使用了兩個不同的類和函數進行了補充。

<?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 } ?> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM