php lastinsertid()在数据库类中返回0

nhaq1z21  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(285)

我正在尝试为sql查询创建数据库类。
我可以把基本的积垢东西,但当我添加一些数据库 lastInsertId() 返回0
mysql类中的db连接

  1. public function connect() {
  2. return new PDO("mysql:host=$this->db_host;dbname=$this->db_name",
  3. $this->db_username,$this->db_password);
  4. }

数据库类中的save方法

  1. public function save()
  2. {
  3. $values = [];
  4. $keys = [];
  5. $marks = [];
  6. foreach ($this->data as $key => $value) {
  7. array_push($keys, $key);
  8. array_push($marks, '?');
  9. array_push($values, $value);
  10. $this->__unset($key);
  11. }
  12. $keys = implode(',', $keys);
  13. $marks = implode(',', $marks);
  14. try {
  15. $query = $this->connect()->prepare("INSERT INTO $this->table ($keys) VALUES ($marks)");
  16. $query->execute($values);
  17. return $this->connect()->lastInsertId();
  18. } catch (PDOException $e) {
  19. return $e->getMessage();
  20. }
  21. }

我正在使用这个类,它成功地将数据保存到数据库,但仍然返回0

  1. $query = new Database('table');
  2. $query->foo = "bar";
  3. $data = $query->save();
  4. echo $data;
  5. // 0

我在这里错过了什么?我该怎么修?

tzxcd3kk

tzxcd3kk1#

每次调用时都会创建一个新的连接对象 connect ,因此需要将原始调用存储在变量中以便以后重用。见下表:

  1. $query = $this->connect()->prepare("INSERT INTO $this->table ($keys) VALUES ($marks)");
  2. $query->execute($values);
  3. return $query->lastInsertId(); // Here, reuse the var, rather than create new

编辑-我错过了方法的链接。在这种情况下,将它们分开比较有利。见下表:

  1. $query = 'SELECT....';
  2. $db = $this->connect();
  3. $stmt = $db->prepare($query);
  4. // bind params here
  5. $stmt->execute();
  6. $lastId = $db->lastInsertId();

你得跑了 lastInsertId 而不是事先准备好的声明。

相关问题