Я использовал приведенное ниже как способ подключения к базе данных MySQL и как я сейчас запрашиваю ее.Кажется, это немного отличается от множества примеров, которые я вижу в Интернете.Я не могу понять, как заставить lastInsertId () работать с этой настройкой:
define("DB_HOST", "localhost");
define("DB_NAME", "mydatabase");
$link = new DBLink("username", "password");
class DBLink {
private $host = DB_HOST;
private $dbname = DB_NAME;
private $user;
private $pass;
private $dbConnection;
private $error;
private $sql;
public function __construct($user, $pass) {
$this->user = $user;
$this->pass = $pass;
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
try {
$this->dbConnection = new PDO($dsn, $this->user, $this->pass, $options);
}
catch(PDOException $e){
$this->error = $e->getMessage();
echo $this->error;
}
}
public function query($query) {
$this->sql = $this->dbConnection->prepare($query);
}
public function bind($param, $value) {
$this->sql->bindParam($param, $value);
}
public function execute() {
return $this->sql->execute();
}
Затем я добавлю новую строку в базу данных следующим образом:
$link->query("INSERT INTO users (username, phone, email)
VALUES (:username, :phone, :email)");
$link->bind(':username', $username);
$link->bind(':phone', $phone);
$link->bind(':email', $email);
$link->execute();
После добавления строки я хочу получить идентификатор строки, которая была вставлена в базу данных.Я пробовал:
$link->lastInsertId();
$link->$sql->lastInsertId();
Написание отдельной функции с последующим использованием функции внутри класса DBLink:
$link->getLastID();
public function getLastID() {
return $this->sql->lastInsertId();
}
И другие дикие догадки, такие как
$this->dbConnection->lastInsertId();
Я также попробовал все вышеперечисленные варианты с помощью insert_id вместо lastInsertId (), потому что я видел, что это рекомендуется в нескольких местах.
И еще несколько вещей, на которые я потратил около 3 часов.Ничто не работает, чтобы вернуть последний вставленный идентификатор.Я просмотрел множество примеров в Интернете, но все они выполняют запрос к базе данных немного иначе, чем у меня.Я полагаю, что lastInsertId () должен быть в объекте PDO, но я просто не уверен, как это назвать так, как у меня настроены мои запросы и ссылка на базу данных.Кто-нибудь может помочь?
Редактировать: Может быть, у меня неправильно настроена база данных MySQL?Первичным ключом для этой таблицы является id.Это то, как lastInsertId () знает, из какого столбца получить «id», по сравнению с любым другим столбцом?