Я искал много подобных вопросов, хотя я не могу найти ничего, что периодически < /strong> возвращает 0 < /p>
**** РЕДАКТИРОВАТЬ ***** < /p>
Я с тех пор пробовал тестирование с новой таблицей только с двумя столбцами, что я могу иметь также около 1 в 50 раз. Только сейчас смог протестировать на платном хостинговом сервере, и я не смог повторить свою проблему < /p>
Я предполагаю, что проблема моей быть специфической для этого веб -хоста. < /p>
Проблема: < /strong> < /p>
Получил «Последний ID». я. < /p>
localhost, все работает нормально без проблем. Проблема возникает только тогда, когда мой веб -сайт размещен на сервере. < /P>
SELECT LAST_INSERT_ID() intermittently returns 0
$PDOconnection->lastInsertId(); Always returns correct ID
< /code>
Мне нужно надежно получить последний вставленный идентификатор на основе подключения, поскольку он важен для процесса проверки моего веб-сайта при создании порядка покупки в базе данных. /> Вставка SQL всегда работает нормально, и база данных показывает новую запись. < /li>
Переключение PHP -версии не разрешает проблему < /li>
Веб -хост, который я использую, является бесплатным службой хостинга, которую я использую для Live
Testing Creats < /li>
Время загрузки страницы. /> < /ul>
Я раздевал весь код (как ниже), чтобы проверить в простоте. Проблема по -прежнему остается < /p>
Я не могу тренироваться там, где лежит моя проблема. < /P>
include_once "php/config.php";
$cookie_id = 0;
// Time of checkout
$time = gmdate("d/m/Y h:i:s");
// Create new purchase order
$sql_insert = "INSERT INTO user_purchases (cart_id, timestamp) VALUES (:cookie_id, :time)";
$stmt_insert = $PDOconnection->prepare($sql_insert);
$stmt_insert->bindParam(':cookie_id', $cookie_id, PDO::PARAM_STR);
$stmt_insert->bindParam(':time', $time, PDO::PARAM_STR);
$stmt_insert->execute();
$checkout_id_0 = $PDOconnection->lastInsertId();
// Get the primary key id of the last inserted item on per-connection basis
$sql_last_id = "SELECT LAST_INSERT_ID()";
$stmt_last_id = $PDOconnection->prepare($sql_last_id);
$stmt_last_id->execute();
$r_last_id = $stmt_last_id->fetch(PDO::FETCH_ASSOC);
$checkout_id_1 = $r_last_id['LAST_INSERT_ID()'];
echo $checkout_id_0 . " " . $checkout_id_1; // I echoed out to observe results
< /code>
Реальный пример результатов для 10 запросов в ряду (просто, просто освежив страницу). Я повторил результаты рядом. < /p>
checkout_id_0 $checkout_id_1
connection config: < /p>
$PDOconnection = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", $sql_username, $sql_password);
// Set PDO error mode to exception
$PDOconnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Set PDO Attribute to force native prepared statements
$PDOconnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Подробнее здесь: https://stackoverflow.com/questions/467 ... -returns-0