В чем может быть проблема c foreach?

199
05 августа 2017, 05:04
$query = 'SELECT COUNT(*) FROM task WHERE user_task="'.$user.'"';
        foreach ($parameters as $key=>$val) {
            if (!$key || !$key%2) $query .= ' AND '.$val.'="';
            else $query .= $val.'"';
        }
        echo $query;
//SELECT COUNT(*) FROM task WHERE user_task="2" AND status_task="0"status_task"1"

Почему такой результат???? Должен же быть:

SELECT COUNT(*) FROM task WHERE user_task="2" AND status_task="0" AND status_task="1"
Answer 1

Ну разберите свой код по порядку и все станет на место.

Первая итерация: !0 || !0%2 => !(false) || !(false) => true || true => true

Вторая итерация: !1 || ... => !(true) || ... => false || ... => false

Третья итерация: !2 || ... => !(true) || ... => false || ... => false

Как видите, результат всегда отрицательный и не зависит от того, что у Вас идет после первой проверки. В итоге будет только один AND в самом начале и дальше все будет сплошной строкой. Поэтому в случае ошибок на простых блоках проверяйте свой алгоритм на правильность, если не в уме, то хотя бы на бумаге расписывая его правильность.

И да, это небезопасный способ составления запросов, так как содержит уязвимисти и приложение можно легко взломать хакеру. Используйте подготовленные запросы для PDO или подготовленные запросы для mysqli.

READ ALSO
Как выводить левый блок только на главной странице,а на всех остальных его скрывать?

Как выводить левый блок только на главной странице,а на всех остальных его скрывать?

Слева блок это категорииНа каждой странице (/cart или /register) видно этот блок

170
php вычислить разницу дат

php вычислить разницу дат

Не получается написать скриптСмысл с в том, что мне нужно сравнить время которое записано у пользователя в бд, с текущим, и если разница составляет...

194
Компиляция QT-приложения в Ubuntu, android

Компиляция QT-приложения в Ubuntu, android

Не получается скомпилировать приложение для смартфонов(https://vk

188
Реверс массива С++

Реверс массива С++

Покажите пожалуйста как это сделать красиво используя стандартный массив, очень смущает int *_arr = new int[len]; <- вообще честно говоря жутковатый...

412