代码之家  ›  专栏  ›  技术社区  ›  Ezaldeen Ezaldeen

pdo包装器最后一个id返回0

  •  0
  • Ezaldeen Ezaldeen  · 技术社区  · 2 年前

    您好,我正在尝试使用php mvc制作一个项目,我在其中使用了pdo包装包 主要的问题是,当我使用lastinsertid时,它总是返回0,我知道我应该使用相同的连接,但在我使用包的情况下,我该怎么做??

    这是模型代码

    <?php
       namespace MVC\core;
        use Dcblogdev\PdoWrapper\Database as Database;
    
        class model{
       static function db(){
        $options = [
        //required
        'username' => 'root',
        'database' => 'gallery',
        //optional
        'password' => '',
        'type' => 'mysql',
        'charset' => 'utf8',
        'host' => 'localhost',
        'port' => '3306'
         ];
          return  $db = new Database($options);
        }
        }
        ?>
    

    在这里,我将pdo与我的函数一起使用

        <?php
    namespace MVC\model;
    use MVC\core\model;
    use MVC\core\session;
    class adminpost extends model {
    function getCategory(){
        return  model::db()->rows("SELECT * FROM `category` WHERE id NOT in (SELECT parent_id from category)");
    }
    function getposts(){
        return  model::db()->rows("select * from posts");
    }
    function getpostsByCategory($id){
        return  model::db()->rows("select * from posts where category_id = ?",[$id]);
    }
    function insertimage($data){
        return model::db()->insert('images', $data);
    
    }
    function insertpost($data){
         return model::db()->insert('posts', $data);
    
    }
    function lastid(){
        return model::db()->lastInsertId();
    
    }
    }
    
    
    ?>
    

    这是我使用模型函数的控制器

    class adminpostcontroller extends controller{
    function postinsert(){
    $post = new adminpost;
    $data = [
    'title'=>$_POST['title'],
    'text'=>$_POST['text']
    ];
    $insert = $post->insertpost($data);
    }
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Scuzzy    2 年前

    我猜每次你打电话 model::db() 由于以下原因,您正在建立新连接: new Database($options) ,您需要通过静态引用或其他最合适的方式在操作期间创建并保留一个连接。

    一种“廉价”的方法是

    static $db;
    return isset( $db ) ? $db : $db = new Database($options);
    

    其他方法可以是在类中创建引用,如 static $db; 使用 static::$db

    class model{
      static $db;
    

    然后

    return isset( static::$db ) ? static::$db : static::$db = new Database($options);