1

このクラスを使用してデータベースに接続しています。lastInsertId()を取得できなかったことを除けば、問題なく動作します。

<?php
class connDB
{ 

public function connDB()
   {

    require_once( 'dbconfig/config.php' );

    $this->confPDO = array(
                          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,  
                          PDO::ATTR_PERSISTENT => false, 

              PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8"
                         );

    try
     {
     $this->dbc = new PDO( "mysql:host=$this->dbHost;dbname=$this->dbName", 
     $this->dbUser, $this->dbPass, $this->confPDO );
     }

   catch( PDOException $errMsg )
     {
      return false;
     }

   }

   public function exec( $sql, array $params = array() )
   {

   try
     {
     $this->stmt = $this->dbc->prepare( $sql );
      if ( count( $params ) > 0 )
        {
        foreach ( $params as $k=>$v )
                {
                $this->bind($k, $v);
                }
        }
        return $this->stmt->execute();
     }


   catch( PDOException $errMsg )
     {

     $this->dbc = null;

     return false;
     }

   }


  public function bind( $param, $value, $type = null )
   {
   if ( is_null( $type ) )
      {
      switch ( true )
             {
             // Boolen parameter
             case is_bool( $value ):
                  $type = PDO::PARAM_BOOL;
                  break;
             // Integer parameter
             case is_int( $value ):
                  $type = PDO::PARAM_INT;
                  break;
             // Null parameter
             case is_null( $value ):
                  $type = PDO::PARAM_NULL;
                  break;
             // String parameter
             default:
                  $type = PDO::PARAM_STR;
             }
      }
      $this->stmt->bindValue( $param, $value, $type );
   }



  public function single()
   {

   return $this->stmt->fetch(PDO::FETCH_ASSOC);
   }


  public function resultset()
   {

   return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
   }


  public function rowCount()
   {

   return $this->stmt->rowCount();
   }


 } 

使い方: [SELECT]


 $sql = "SELECT * FROM < table >";
 $db->exec($sql, $params);
 $rows = $db->resultset();
 foreach ($rows as $row)
       {
       echo $row['< column >'] . "\n";
       }

使用法: [挿入]


 $sql = "INSERT INTO < table > (< column_1 >, < column_2 >, ... ) VALUES 
 (:valuename_1, 
 :valuename_2, ...)";
 $params = array(':valuename_1' => 'value', ':valuename_2' => 'value', ...);
 $db->exec($sql, $params);

私はこのようにしようとしました:

include_once'classe.php';

 $db = new connDB();

 $sql = "INSERT INTO < table > (< column_1 >, < column_2 >, ... ) VALUES 
 (:valuename_1, 
 :valuename_2, ...)";
 $params = array(':valuename_1' => 'value', ':valuename_2' => 'value', ...);

 $db->exec($sql, $params);

 $id = $db->lastInsertId();

エラーが発生します:

  Fatal error: Call to undefined method connDB::lastInsertId() in  

クラスにメソッドを追加しようとしました:

     public function lastinsert()
   {
   // Return result
   return $this->stmt->lastInsertId();
   }

次に、次のように呼び出しました。

    $db = new connDB(); 
$id = $db->lastinsert();

今回のエラーは

 Fatal error: Call to undefined method PDOStatement::lastInsertId() in 
4

3 に答える 3

3

lastInsertId()クラスにメソッドがありません。クラス
に追加する必要があります。connDB

lastInsertId() を取得するには、$stmt ではなく、$dbc を呼び出す必要があります。

$this->dbc->lastInsertId();

この関数は に属しているためPDO class、 ではありませんPDO statement class

また、このコードは問題を引き起こす可能性があります

catch( PDOException $errMsg )
 {

 $this->dbc = null;

 return false;
 }
}

exec() 関数をこのようにします

public function exec( $sql, array $params = array() )
{
    $this->stmt = $this->dbc->prepare( $sql );
    foreach ( $params as $k=>$v )
    {
        $this->bind($k, $v);
    }
    return $this->stmt->execute();
}
于 2013-06-01T15:43:07.100 に答える
0

同じデータベースクラスを使用して、次のように使用できましたlastInsertId:

$db = new connDB();
...
$_SESSION['users_id'] = $db->dbc->lastInsertId('id');
于 2013-10-14T01:57:08.697 に答える
0

モデルの保存機能を使用している場合:

$row->save();

以下を使用できます。

return $row->save();

を返すid

于 2013-10-22T12:18:35.603 に答える