Проблема:mysqli_commit терпит неудачу, когда добавляется оператор выбора
Невозможно хранить данные с MySql хранимой процедуры с mysqli_begin_transaction
.
Детали:
Код ниже будет делать простой insert
и select
с использованием MySQL хранимой процедуры. Код работает нормально безselect
заявление. Однако после добавления оператора select
он не будет передавать никаких данных, даже если запрос возвращает успех на стороне PHP.
Отрывки (РНР):
$DB_DRRM_SQLI = mysqli_connect("localhost","root","", "sandbox_db");
mysqli_begin_transaction($DB_DRRM_SQLI);
$SQL_QUERY_CODE = "CALL SANDBOX_TEST()";
$DB_QUERY = mysqli_query($DB_DRRM_SQLI, $SQL_QUERY_CODE);
// ERROR REPORTING
if($DB_QUERY === false)
{
echo mysqli_error($DB_DRRM_SQLI);
mysqli_rollback($DB_DRRM_SQLI);
}
else
{
echo 'success';
mysqli_commit($DB_DRRM_SQLI);
}
exit;
Отрывки (MySql хранимой процедуры):
BEGIN
INSERT INTO
`sandbox_table`
(
`SOME_STRING`
)
VALUES
(
'ABCDEFGHIJKL...'
);
SELECT
LAST_INSERT_ID() AS INSERTED_ID,
'ABCDE...' AS OTHER_PARAMS;
END
базы данных (таблица sandbox_table):
- RECORD_PRIMARY_ID (Int - Авто инкремент)
- SOME_STRING (Varchar - 500 длина)
Spec:
- PHP версия: 5.6.14
- 10.1.8- MariaDB
- Хранение Двигатель: InnoDB
Примечания:
- Если сделка совершается в хранимой процедуре отлично работает, но мне нужно PHP удалось транзакции для обработки нескольких запросов запросов и ответа в зависимости от результата запроса.
- (Это может быть возможно последним средством, если нет другого решения, где мне нужно, чтобы преобразовать весь PHP код хранимой процедуры и нужно передать тонн параметра)
Методы Испытано:
- Пробуется с другой версией PHP версии 7.0.9 с таким же результатом (10.1.16-MariaDB)
- Протестировано новой базой данных без каких-либо других данных, кроме
sandbox_table
и выше хранимой процедуры. - Протестировано без дополнительных библиотек (проверено с использованием исключительно над фрагментами).
Как вы знаете, что MySQLi фиксация не удалась? –
Почему вы не обрабатываете транзакции в сохраненной процедуре? – Shadow
@ Ваш общий смысл. Он не сохранит запись на 'sandbox_table', для этого образца она должна добавить одну запись со строкой« ABCDEFGHIJKL ... »в поле« SOME_STRING ». – FrozenFire