我正在使用此类连接到数据库。它工作得很好,除了我无法得到 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
答案 0 :(得分:3)
班上没有lastInsertId()
方法
您需要将其添加到connDB
类。
你需要调用$ dbc而不是$ stmt来获取lastInsertId();
$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();
}
答案 1 :(得分:0)
使用相同的数据库类,并且可以像这样使用lastInsertId
:
$db = new connDB();
...
$_SESSION['users_id'] = $db->dbc->lastInsertId('id');
答案 2 :(得分:0)
如果您使用的是模型的保存功能:
$row->save();
您可以使用:
return $row->save();
返回id