PHP/MySQL | Что за магия?
Топ дня:
bazcms [!] [БАН]
DELETED
Автор
6 октября 2019, в 15:22
Delete
<?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
DELETED
6 октября 2019, в 15:25
Delete
if (in_array($training, [1, 2, 3, 5, 6, 7]) || !$this->step_1_2_3_5_6_7()) {
DELETED
Автор
6 октября 2019, в 15:35
Delete
Mistika (06.10.2019 в 15:25)
мб так надо?
if (in_array($training, [1, 2, 3, 5, 6, 7]) || !$this->step_1_2_3_5_6_7()) {
мб так надо?
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]), то уже что-то пошло не так будет сообщение
!$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
Это условие выполнится когда запрос в базу не пройдёт, а именно если будет ошибка синтаксиса
Во всех остальных случаях (даже если таблица пуста) запрос будет выполняться
В Вашем случае можно проверять количество затронутых строк
https://www.php.net/manual/ru/pdostatement.rowcount.php
и имена баз, таблиц, столбцов лучше брать в ` ` (т.е. приучить себя к этому)
Иначе можно столкнуться с зарезервированным словом и долго разбираться почему запрос не исполняется
________
посл. ред. 06.10.2019 в 15:45; всего 2 раз(а); by Mobiaaa
DELETED
Автор
6 октября 2019, в 15:53
Delete
Mobiaaa (06.10.2019 в 15:42)
!$this->step_1_2_3_5_6_7() это и не выполнится
Это условие выполнится когда запрос в базу не пройдёт, а именно если будет ошибка синтаксиса
Во всех остальных случаях (даже если таблица пуста) запрос будет выполняться
В Вашем случае можно проверять количество затронутых строк
https://www.php.net/manual/ru/pdostatement.rowcount.php
и имена баз, таблиц, столбцов лучше брать в ` ` (т.е. приучить себя к этому)
Иначе можно столкнуться с зарезервированным словом и долго разбираться почему запрос не исполняется
!$this->step_1_2_3_5_6_7() это и не выполнится
Это условие выполнится когда запрос в базу не пройдёт, а именно если будет ошибка синтаксиса
Во всех остальных случаях (даже если таблица пуста) запрос будет выполняться
В Вашем случае можно проверять количество затронутых строк
https://www.php.net/manual/ru/pdostatement.rowcount.php
и имена баз, таблиц, столбцов лучше брать в ` ` (т.е. приучить себя к этому)
Иначе можно столкнуться с зарезервированным словом и долго разбираться почему запрос не исполняется
ну так, Дима, запрос вида
... update users set id = NULL ...вернёт же false
DELETED
Автор
6 октября 2019, в 15:56
Delete
Mobiaaa (06.10.2019 в 15:42)
!$this->step_1_2_3_5_6_7() это и не выполнится
Это условие выполнится когда запрос в базу не пройдёт, а именно если будет ошибка синтаксиса
Во всех остальных случаях (даже если таблица пуста) запрос будет выполняться
В Вашем случае можно проверять количество затронутых строк
https://www.php.net/manual/ru/pdostatement.rowcount.php
и имена баз, таблиц, столбцов лучше брать в ` ` (т.е. приучить себя к этому)
Иначе можно столкнуться с зарезервированным словом и долго разбираться почему запрос не исполняется
!$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 Вероломство
DELETED
Автор
6 октября 2019, в 21:25
Delete