Как и многие другие, использование pdo lastInsertID () возвращает мне только 0. Я посмотрел на все вспомогательные вопросы, которые задает стек Overflow, искал в Интернете, и я все еще получаю 0. Я думаю, что код верен, но я явно что-то упустил, так как все равно получаю 0, что бы я ни пытался.
В моей таблице есть столбец идентификатора с автоинкрементом (с именем 'id'). Это также первичный ключ для таблицы. Я использую хранимую процедуру для вставки, и поэтому код выглядит так:
$stmt = $pdo_write->prepare('CALL sp_Save_Requests(:formSecret,:ipAddress)');
$stmt->bindParam(':formSecret', $formSecret, PDO::PARAM_STR);
$stmt->bindParam(':ipAddress', $ipAddress, PDO::PARAM_STR);
$stmt->execute();
$lastID = $pdo_write->lastInsertID();
Это последовательно возвращает 0, даже если в таблице доступен новый идентификатор - как видно из экспорта в phpmyadmin ниже.
Я использую отдельные соединения в зависимости от того, выбираю я или вставляю / обновляю. В этом случае объект подключения:
try {
$pdo_write = new PDO("mysql:host=$myServer;dbname=$myDB", $myRW_UID, $myRW_PW);
$pdo_write->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$pdo_write->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$pdo_write->setAttribute( PDO::ATTR_EMULATE_PREPARES,TRUE );
} catch(PDOException $e) {
echo 'RW Connection Failed: '.$e->getMessage();
exit();
}
Одна возможная проблема - я использую триггер для создания и установки guid в таблице, но он срабатывает перед фактической вставкой. Дамп из phpmyadmin таблицы следует, хотя имя реальной таблицы было изменено .:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
-- Table structure for table `tbl_test`
CREATE TABLE `tbl_test` (
`id` int(10) NOT NULL,
`guid` varchar(100) NOT NULL,
`formSecret` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Triggers `tbl_test`
--
DELIMITER $$
CREATE TRIGGER `tr_TestRequests_GUID` BEFORE INSERT ON `tbl_test` FOR EACH ROW SET NEW.guid = UUID()
$$
DELIMITER ;
--
-- Indexes for table `tbl_test`
--
ALTER TABLE `tbl_test`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `guid` (`guid`),
ADD UNIQUE KEY `id` (`id`);
--
-- AUTO_INCREMENT for table `tbl_test`
--
ALTER TABLE `tbl_test`
MODIFY `id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=44;
COMMIT;
Я бы предпочел не использовать выбор, чтобы получить идентификатор, если мне не нужно. Но я в тупике и надеюсь, что кто-то увидит, чего мне не хватает. Заранее большое спасибо за любую помощь.