【问题标题】:not able to select the row where the last inserted id is [Mysql, php pdo oop] [duplicate]无法选择最后插入的 id 为 [Mysql, php pdo oop] [重复] 的行
【发布时间】:2021-02-23 02:23:54
【问题描述】:

当我尝试从 Mysql 表中选择最后插入的 id 时,我遇到了这个问题,我得到 value = bool(true) 而不是 values。

我想做什么:

if (isset($_POST['submit'])){
                if (isset($_POST['paName']) && isset($_POST['paEmail']) && isset($_POST['paTel']) && isset($_POST['aName']) && isset($_POST['Artnum'])){
                    
                    if (!empty($_POST['paName']) && !empty($_POST['paEmail']) && !empty($_POST['paTel']) && !empty($_POST['aName']) && !empty($_POST['Artnum'])){
                        
                         $paName = $_POST['paName'];
                         $paEmail = $_POST['paEmail'];
                         $paTel = $_POST['paTel'];
                         $aName = $_POST['aName'];
                         $Artnum = $_POST['Artnum'];
                      
                        $query = "INSERT INTO crud (paName,paEmail,paTel,aName,Artnum) VALUES ('$paName','$paEmail','$paTel','$aName','$Artnum')";
                       if ($sql = $this->conn->exec($query)){
                           $id = $this->conn->lastInsertId();
                           $query = "SELECT * FROM crud WHERE id = '".$id."'";
                           $stmt=$this->conn->prepare($query);
                           $stmt->execute();
                           var_dump($stmt->execute());die();
}

但是如果我在没有条件的情况下做同样的事情,我会从表中获取所有值,这意味着我的条件是错误的。

你能告诉我我做错了什么吗?

【问题讨论】:

    标签: php mysql oop pdo


    【解决方案1】:

    您似乎在第一个查询中缺少$this->conn->prepare()。你可以试试这个例子:

    lastInsertId() 仅在 INSERT 查询之后起作用。

    正确:

    $stmt = $this->conn->prepare("INSERT INTO crud (paName,paEmail,paTel,aName,Artnum) 
                                  VALUES(?,?,?,?,?);");
    $sonuc = $stmt->execute([$paName,$paEmail,$paTel,$aName,$Artnum]);
    $LAST_ID = $this->conn->lastInsertId();
    

    不正确:

    $stmt = "INSERT INTO crud (paName,paEmail,paTel,aName,Artnum) VALUES ('$paName','$paEmail','$paTel','$aName','$Artnum')";
    $sonuc = $this->conn->execute($stmt);
    $LAST_ID = $this->conn->lastInsertId(); //always return string(1)=0
    

    【讨论】:

    • 虽然不是“遗漏”而是特意这样写,但当然是一个prepared statement是应该怎么做的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2011-02-15
    相关资源
    最近更新 更多