INSERT не срабатывает после SELECT
Не могу понять свою ошибку (PHP 7.3)
$db = new test_mysqli();
$dbSelect = "SELECT name, password FROM users WHERE name = '".$_POST['name']."';";
$resultSelect = $db->query($dbSelect);
echo "Row:".$resultSelect->num_rows."!<br>";
if ($resultSelect->num_rows > 0) {
echo "Fail. Name ".$_POST['name']." already used <br>";
while ($row = $resultSelect->fetch_assoc())
echo $row['name']." ".$row['password']."<br>";
} else {
$dbInsert = "INSERT INTO users VALUES (NULL, '".$_POST['name']."', '".$_POST['password']."', '".gmdate('Y-m-d h:i:s')."');";
echo $dbInsert."<br>";
$resultInser = $db->query($dbInsert);
if ($resultInser)
echo "Success. ".$resultInser->insert_id."!<br>";
else
echo "Fail. ".$db->error."<br>";
$resultInser->close();
}
$resultSelect->close();
$db->close();
Результат
Row:1!
Fail. Name qwe3 already used
qwe3 3ewq
Select работает
Row:0!
INSERT INTO users VALUES (NULL, 'qwe4', '4ewq', '2020-03-09 11:43:17');
Success. !
Insert не работает. В базе ничего не появляется. Корректность запроса проверял вписывая в базу 2ую строчку мануально. $db->error тоже пуст.
Но если проверку SELECT вырезать, INSERT создаст запись в базе, хотя и не вернув insert_id.
Ответы (2 шт):
Изначально вопрос был сформулирован как "INSERT выполняется без ошибок, но в БД ничего нет", поэтому ниже идет ответ на него. Вопрос же "INSERT не срабатывает после SELECT" гораздо более примитивный, и полностью покрывается третьим пунктом.
Причин для такого поведения может быть две
- Где-то выше по коду стартует транзакция/отключается автокоммит. Для решения проблемы надо вернуть БД в нормальный режим атомарных запросов.
- Проверка вставки производится не в той базе данных, к которой подключается пхп скрипт. Для проверки сделать запрос на получение только что добавленной строки в том же пхп скрипте.
- Ошибка всё-таки есть. Для проверки надо сконфигурировать пхп и mysqli, чтобы они показывали сообщения об ошибках.
Заменил две переменные $resultSelect и $resultInser на одну $queryResult и заработало. Я ваш php шатал с матом-перематом.
$db = new mpo_mysqli();
$dbSelect = "SELECT name, password FROM users WHERE name = '".$_POST['name']."';";
$queryResult = $db->query($dbSelect);
echo "Row:".$queryResult->num_rows."!<br>";
while ($row = $queryResult->fetch_assoc())
echo $row['name']." ".$row['password']."<br>";
$fail = $queryResult->num_rows > 0;
$queryResult->close();
if ($fail) {
echo "Fail. Name ".$_POST['name']." already used <br>";
} else {
$dbInsert = "INSERT INTO users VALUES (NULL, '".$_POST['name']."', '".$_POST['password']."', '".gmdate('Y-m-d h:i:s')."');";
echo $dbInsert."<br>";
$queryResult = $db->query($dbInsert);
if ($queryResult)
echo "Success. ".$queryResult->insert_id."!<br>";
else
echo "Fail. ".$db->error."<br>";
$queryResult->close();
}
$db->close();