LastInsertId返回0

时间:2017-12-22 09:22:08

标签: php sql

当我尝试添加INSERT INTO以将数据推送到我的数据库时,它没有添加任何内容。注意到lastInsertId不起作用。给回0。

有趣的部分我几天前遇到这个问题并通过删除表并添加一个新的修复它,但这次不起作用。我在ID上使用自动增量。

我知道我可以使用SELECT检索信息,所以我知道我已经连接到我的数据库了。

这是我构建查询的方式:

public function tools(){
  $filename = $_POST['namefile'];
    $this->query("SELECT * FROM page_context WHERE file_name='kalm'");
    $rows = $this->resultSet();

    if(isset($_POST["sendFile"])) {
        $this->query("INSERT INTO page_context(file_name) VALUES(:file_name)");
        $this->bind(':file_name' , $filename);
        $this->execute();
        print_r($this->lastInsertId()); //0
        if($this->lastInsertId()){  //Doesn't get executed because no value
            header('Location: '.ROOT_URL.'home/pageContext/'.$filename);
            return;
        }
    }
  }
}

第一部分只是测试是否建立连接。

这就是lastInsertId的构建方式。

public function lastInsertId(){
    return $this->dbh->lastInsertId();
}

在stackoverflow和其他网站上看得够,但大部分时间它都是拼写错误或就是这样。我无法确定为什么lastInsertId为0的问题。

修改<!/强>

这是我的构造函数,它工作正常,因为我可以检索我调用特定项目的其他信息(UPDATE?WHERE?)。我在运行时得到了连接,因为id不能正常工作,我无法传递数据。

public function __construct(){
    $this->dbh = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS);
}

1 个答案:

答案 0 :(得分:1)

我认为首先你应该检查插入子句是否确实发生了数据已插入数据库,

如果是的话:

那么问题出在这一行$this->lastInsertId(),我建议你查看这个&#39; dbh&#39;类

如果否:

然后问题来自这一行

$this->query("INSERT INTO page_context(file_name) VALUES(:file_name)");

如果您可以告诉我们更多关于您使用的框架,我们可以调试查询。

但我建议尝试插入静态值,看看它是否有效 喜欢

$this->query("INSERT INTO page_context(file_name) VALUES(some static value)");