Как получить целочисленные значения из массива mysql?

202
08 марта 2022, 05:30

Записал в в одно поле mysql три числа(21,22,23). Через цикл хочу проверить, совпадает ли число из данного поля базы данных с некоторым числом. У меня не получилось. Когда проверяю через gettype показывает (string NULL NULL).

$res=mysql_query("SELECT dostup FROM users where id='$id'",$db);
$re=mysql_fetch_array($res);
for($i=0;$i<=count($re);$i++){
    echo gettype($re[$i]);
};

когда через echo показываю, все числа нормально выводятся. Но условие if выполняется только для первого(21) числа. В базе данных записаны через запятую. Объявлены как varchar(пробовал int, тоже самое).

Когда хочу принудительно объявить как целое число, уходит в бесконечный цикл(integerintegerintegerinteger...и т.д).

$res=mysql_query("SELECT dostup FROM users where id='$id'",$db);
$re=mysql_fetch_array($res);
for($i=0;$i<=count($re);$i++){
    settype($re[$i],"integer");
    echo gettype($re[$i]);
};

Вот как я хотел сделать.

$res=mysql_query("SELECT dostup FROM users where id='$id'",$db);
$re=mysql_fetch_array($res);
$chislo=22;
for($i=0;$i<=count($re);$i++){
    if($re[$i]==$chislo){
    echo "Есть совпадение";
break;
    }
};
Answer 1

В том случае, если у Вас в БД данные записаны как `21,22,23'

В базе данных записаны через запятую.

То надо сначала разбить результат на массив, а потом провести поиск по этому массиву, и так для каждой записи.

Пример:

$res=mysql_query("SELECT dostup FROM users where id='$id'",$db);
$re=mysql_fetch_array($res);
$chislo=22;
for($i=0;$i<=count($re);$i++){
    $temp = explode(',', $re[$i]); //Разбиваем данные из строки БД
    foreach ($temp as $k=>$value){ //Проводим поиск по полученному массиву
        if($value==$chislo){
            echo "Есть совпадение";
            break;
        }
    }
};

Для теста пример:

$re = array('21,20,23', '24,25,26', '27,28,29'); // Аналог полученных данных в mysql, если их много. 
$chislo=22;
for($i=0;$i<=count($re);$i++){
    $temp = explode(',', $re[$i]);
    foreach ($temp as $k=>$value){
        if($value==$chislo){
            echo "Есть совпадение";
            break;
        }
    }
};
Answer 2

Вот как я решил эту проблему.

$res=mysql_query("SELECT dostup FROM users where id='$id'",$db);
$re=mysql_fetch_array($res);
$chislo=22;
$p = explode(",","$re[0]");
for($i=0;$i<count($p);$i++){
settype($p[$i],"integer");
if($p[$i]==$chislo){echo "есть совпадение";
}
}

Наверное ещё можно было бы через FIND_IN_SET, но я не стал копаться.

READ ALSO
Как правильно писать свою СMS?

Как правильно писать свою СMS?

Есть вопросы относительно написания своей CMSЗнаю примеров много и вообще такие системы не очень-то и жалуют

159
Как в Php/Laravel создавать функции для отдельных записей?

Как в Php/Laravel создавать функции для отдельных записей?

Не знал как конкретнее назвать топик, так что извеняйте

171
Сделать number_format для decimal

Сделать number_format для decimal

Дело в том, что я вывожу число 10000000000000000000000000000000 из базы, после обработки функцией number_format оно превращается в 9999

98
Если нету слова, то не выводить

Если нету слова, то не выводить

Как выводить только эл-ты, у которых встречается слово IMDB

110