Loading...
PHP/MySQL | Что за магия?

<?php
public function trainingHandler($training)
{
if (in_array($training, [1, 2, 3, 5, 6, 7]) && !$this->step_1_2_3_5_6_7()) {
return $this->alert = 'Что-то пошло не так';
}
if ($training == 12) {
$this->alert = 'Вы закончили обучение';
} else {
$this->alert = 'Вы прошли ' . $training . '-й этап обучения';
}
return true;
}

private function step_1_2_3_5_6_7()
{
return $this->pdo('update users set baks = baks + 100, hp = hp - 15, hp_up = :tm, exp = exp + 5, hit = hit - 1, hit_up = :tm where id = :id limit 1', [
':tm' => time(),
':id' => $this->uid
]);
}


ВВОДНАЯ: var_dump($this->uid); // NULL

Почему отрабатывает - Вы прошли 1-й этап обучения.

Разве не должно сработать условие

<?php
if (in_array($training, [1, 2, 3, 5, 6, 7]) && !$this->step_1_2_3_5_6_7()) {
return $this->alert = 'Что-то пошло не так';
}


ведь метод step_1_2_3_5_6_7() вернёт же false *arbuz*
мб так надо?
if (in_array($training, [1, 2, 3, 5, 6, 7]) || !$this->step_1_2_3_5_6_7()) {
Mistika (06.10.2019 в 15:25)
мб так надо?
if (in_array($training, [1, 2, 3, 5, 6, 7]) || !$this->step_1_2_3_5_6_7()) {


нет, тут вместе условия должны выполниться иначе, если in_array($training, [1, 2, 3, 5, 6, 7]), то уже что-то пошло не так будет сообщение *NO*
!$this->step_1_2_3_5_6_7() это и не выполнится
Это условие выполнится когда запрос в базу не пройдёт, а именно если будет ошибка синтаксиса
Во всех остальных случаях (даже если таблица пуста) запрос будет выполняться
В Вашем случае можно проверять количество затронутых строк
https://www.php.net/manual/ru/pdostatement.rowcount.php
и имена баз, таблиц, столбцов лучше брать в ` ` (т.е. приучить себя к этому)
Иначе можно столкнуться с зарезервированным словом и долго разбираться почему запрос не исполняется
________
посл. ред. 06.10.2019 в 15:45; всего 2 раз(а); by Mobiaaa
Mobiaaa (06.10.2019 в 15:42)
!$this->step_1_2_3_5_6_7() это и не выполнится
Это условие выполнится когда запрос в базу не пройдёт, а именно если будет ошибка синтаксиса
Во всех остальных случаях (даже если таблица пуста) запрос будет выполняться
В Вашем случае можно проверять количество затронутых строк
https://www.php.net/manual/ru/pdostatement.rowcount.php
и имена баз, таблиц, столбцов лучше брать в ` ` (т.е. приучить себя к этому)
Иначе можно столкнуться с зарезервированным словом и долго разбираться почему запрос не исполняется


ну так, Дима, запрос вида
... update users set id = NULL ...

вернёт же false :-[
Mobiaaa (06.10.2019 в 15:42)
!$this->step_1_2_3_5_6_7() это и не выполнится
Это условие выполнится когда запрос в базу не пройдёт, а именно если будет ошибка синтаксиса
Во всех остальных случаях (даже если таблица пуста) запрос будет выполняться
В Вашем случае можно проверять количество затронутых строк
https://www.php.net/manual/ru/pdostatement.rowcount.php
и имена баз, таблиц, столбцов лучше брать в ` ` (т.е. приучить себя к этому)
Иначе можно столкнуться с зарезервированным словом и долго разбираться почему запрос не исполняется


имена баз таблиц и столбцов не нужно брать в ``, если они не дублируют зарезервированные служебные слова, а с некоторых пор даже их IDE не подсвечивает, видно есть на то причины

я password если пишу, то шторм версии < 2019 проси его взять в ``, версия > 2019 уже не подсвечивает и не заставляет такое делать

ну это к вопросу не относится
________
посл. ред. 06.10.2019 в 15:57; всего 1 раз(а); by Вероломство
убрал вообще эти тупые проверки, никогда их и не писал под PDO, чё меня прёт, они не нужны вообще, зачем пользователю знать пошло ли что-то не так *JOKINGLY*
Онлайн: 2
Время:
Gen. 0.0853
(c) Bym.Guru 2010-2025