Я следую структуре mvc в PHP, и я хочу получить последний вставленный идентификатор строки.
Я создал следующий код 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.
но, к сожалению, я получаю эту ошибку: Fatal error: Call to undefined method PDOStatement::lastInsertId()
Я также пробовал эти ссылки стека, но не работал для меня, поэтому буду рад, если вы поможете мне получить идентификатор.
Я также делюсь файлом controller.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); } }
Ты почти там.
Если вы посмотрите на страницу руководства lastInsertId , она вызывается в дескрипторе базы данных – вы в настоящее время вызываете ее в инструкции.
Вам просто нужно позвонить:
$this->db->lastInsertId();
вы можете попробовать следующее:
$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();