То, о чем я думаю, может быть невозможным, я не уверен. Вот моя ситуация:
Я собрал проект для класса, который позволяет учителю создавать тесты для учащихся. В php, где тестовые вопросы / ответы вводятся в базу данных, я использую подготовленные MySQL заявления. Поскольку я использую идентификаторы вопросов / ответов, чтобы связать их, я настроил их так:
$q_stmt = $db -> prepare('query with no correct_answer_id')
$a_stmt = $db -> prepare('query with ? = $q_stmt -> insert_id')
$a_stmt -> bind_params($q_id)
$q_update = $db -> prepare('query with ? = $a_stmt -> insert_id for correct answer')
$q_update -> bind_params($correct_answer_id)
, а затем скрипт зацикливается как:
foreach ($question)
$q_stmt -> execute()
$q_id = $db -> insert_id
foreach ($answers)
$a_stmt -> execute()
id (correct_answer) $correct_answer_id = $db -> insert_id
$q_update -> execute()
Теперь, это работает на моем ноутбуке (Mac OS X.6 с последними (на январь) PHP и MySQL), но когда я загрузил другую часть моего проекта, которая также использовала вложенные подготовленные операторы в мой Веб-сервер Я получил сообщение об ошибке, в котором говорится, что он не оценил мое вложение. Это говорит:
Предупреждение: mysqli :: prepare () [mysqli.prepare]: все данные должны быть извлечены до подготовки нового оператора в root / path / file-name .php в строке 124
Итак, из чего я предполагаю, что вложенные подготовленные утверждения должны быть плохой вещью? Это весьма прискорбно, так как мне действительно понравилось, как я это собрал.
В качестве альтернативы, я мог бы перебирать все вопросы, собирая идентификаторы, а затем повторять цикл по вопросам и ответам, также собирая идентификаторы, а затем зацикливаться еще раз, чтобы обновить вопросы, но это кажется Мне нравится много дополнительной работы для сервера, и я хотел бы попытаться быть эффективным.
Тем не менее, я ищу одну из двух вещей.
1 - каким-то чудом есть способ выполнить мой запрос за один шаг
a - Мне бы понравилось решение, которое позволило бы вставить пару вопрос / правильный ответ за один раз, а затем выполнить цикл позже для переменного числа неправильных ответов, также связанных с вопросом
2 - способ изменить мой веб-сервер (у меня есть полный доступ к cpannel) так, чтобы он больше не ненавидел мои вложенные подготовленные операторы
Заранее спасибо