MySQL получает 0 от pdo lastInsertID - PullRequest
0 голосов
/ 04 июля 2018

Как и многие другие, использование 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;

Я бы предпочел не использовать выбор, чтобы получить идентификатор, если мне не нужно. Но я в тупике и надеюсь, что кто-то увидит, чего мне не хватает. Заранее большое спасибо за любую помощь.

1 Ответ

0 голосов
/ 05 июля 2018

Оказывается, у меня была синтаксическая ошибка в назначении идентификатора переменной out. Потребовалось навсегда, чтобы увидеть это, но теперь оно работает.

Спасибо за отзыв и заставляю меня снова пройти через это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...