Цель: Получить значение LAST_INSERT_ID() из хранимой процедуры MySQL и присвоить его переменная PHP.
Постановка проблемыНесмотря на предоставленный PHP-код, использующий привязки PDO, ему не удается захватить выходную переменную LAST_INSERT_ID() из хранимой процедуры simpleProcedure.Объяснение Извлечение выходных переменных из хранимых процедур MySQL в PHP PDO включает в себя двухэтапный процесс:Этап 1: выполнение процедуры
$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)"); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->bindParam(':returnid', $returnid, PDO::PARAM_INT, 11, PDO::PARAM_INOUT); // Обратите внимание на PDO::PARAM_INOUT $stmt->execute();$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)"); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->bindParam(':returnid', $returnid, PDO::PARAM_INT, 11, PDO::PARAM_INOUT); // Note the PDO::PARAM_INOUT $stmt->execute();Привязывая заполнитель :returnid как INOUT, PDO не только передает переменную PHP в процедуру, но и обновляет ее значением выходной переменной.
Этап 2. Получение выходной переменной
$sql = "SELECT @returnid AS output_id"; $result = $db->query($sql)->fetch(PDO::FETCH_ASSOC); $lastInsertId = $result['output_id'];$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)"); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->bindParam(':returnid', $returnid, PDO::PARAM_INT, 11, PDO::PARAM_INOUT); // Note the PDO::PARAM_INOUT $stmt->execute();Запросите пользовательскую переменную MySQL @returnid, чтобы присвоить ее значение PHP-переменной $lastInsertId.ПримечаниеПривязка PHP переменные параметров INOUT и OUT для процедур MySQL могут привести к ошибкам во время выполнения. Рекомендуется привязывать переменные только к параметрам IN.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3