I am following mvc structure in PHP and I want to retrieve last inserted row ID.
我遵循PHP中的mvc结构,我想检索最后插入的行ID。
I have created following sql code:
我创建了以下sql代码:
$sql = "INSERT INTO song (artist, track, link) VALUES (:artist, :track, :link)";
$query = $this->db->prepare($sql);
$query->execute(array(':artist' => $artist, ':track' => $track, ':link' => $link));
echo $query->lastInsertId(); // To retrieve last inserted row ID.
but unfortunately I ma getting this error: Fatal error: Call to undefined method PDOStatement::lastInsertId()
但不幸的是,我得到了这个错误:致命错误:调用未定义方法PDOStatement: lastInsertId()
I have also tried this stack links but not worked for me so I will happy if you help me for retrieve ID.
我也尝试了这个堆栈链接,但没有为我工作,所以如果你帮助我检索ID我会很高兴。
I am also sharing my controller.php file here.
我也在分享我的控制器。php文件。
/**
* This is the "base controller class". All other "real" controllers extend this class.
*/
class Controller{
/**
* @var null Database Connection
*/
public $db = null;
/**
* Whenever a controller is created, open a database connection too. The idea behind is to have ONE connection
* that can be used by multiple models (there are frameworks that open one connection per model).
*/
function __construct(){
$this->openDatabaseConnection();
}
/**
* Open the database connection with the credentials from application/config/config.php
*/
private function openDatabaseConnection(){
// set the (optional) options of the PDO connection. in this case, we set the fetch mode to
// "objects", which means all results will be objects, like this: $result->user_name !
// For example, fetch mode FETCH_ASSOC would return results like this: $result["user_name] !
// @see http://www.php.net/manual/en/pdostatement.fetch.php
$options = array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING);
// generate a database connection, using the PDO connector
// @see http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/
$this->db = new PDO(DB_TYPE . ':host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS, $options);
}
/**
* Load the model with the given name.
* loadModel("SongModel") would include models/songmodel.php and create the object in the controller, like this:
* $songs_model = $this->loadModel('SongsModel');
* Note that the model class name is written in "CamelCase", the model's filename is the same in lowercase letters
* @param string $model_name The name of the model
* @return object model
*/
public function loadModel($model_name){
require 'application/models/' . strtolower($model_name) . '.php';
// return new model (and pass the database connection to the model)
return new $model_name($this->db);
}
}
2 个解决方案
#1
16
You're almost there.
你差不多了。
If you look at the manual page for lastInsertId, it's called on the database handle - you're currently calling it on the statement.
如果您查看lastInsertId的手册页,会在数据库句柄上调用它——您当前正在语句上调用它。
You just need to call:
你只需要打个电话:
$this->db->lastInsertId();
#2
6
you can try the following -
你可以试试下面的-
$query = "INSERT INTO song (artist, track, link) VALUES (:artist, :track, :link)";
$stmt = $pdo->prepare($query);
$params = array(
"artist" => $artist,
"track" => $track,
"link" => $link,
);
$data = $stmt->execute($params);
$insert_id = $pdo->lastInsertId();
#1
16
You're almost there.
你差不多了。
If you look at the manual page for lastInsertId, it's called on the database handle - you're currently calling it on the statement.
如果您查看lastInsertId的手册页,会在数据库句柄上调用它——您当前正在语句上调用它。
You just need to call:
你只需要打个电话:
$this->db->lastInsertId();
#2
6
you can try the following -
你可以试试下面的-
$query = "INSERT INTO song (artist, track, link) VALUES (:artist, :track, :link)";
$stmt = $pdo->prepare($query);
$params = array(
"artist" => $artist,
"track" => $track,
"link" => $link,
);
$data = $stmt->execute($params);
$insert_id = $pdo->lastInsertId();