Не удалось проверить значение в двух столбцах с помощью запроса MySQL

Я столкнулся с одной проблемой. Мне нужно проверить значение, которое должно присутствовать в двух значениях столбца с использованием PHP и MySQL. Я поясняю свою таблицу ниже.

    id      zip_from               zip_to

     1        751001                751030

db_postcode:

$post_code='751010';
$sql = "select * from db_postcode where zip_from >='".$post_code."' and zip_to='".$post_code."'";
$sqlpin=mysqli_query($conn,$sql);
if (mysqli_num_rows($sqlpin) > 0) {
    $data=array("status"=>"Success","msg"=>"Product is available for this postcode");
}else{
    $data=array("status"=>"Failed","msg"=>"Product is not available for this postcode");
}
echo json_encode($data);

Здесь я получаю сообщение {"status":"Failed","msg":"Product is not available for this postcode"}, которое неверно, потому что код 751010 присутствует в 751001-751030. Здесь мне нужно проверить, должно ли указанное пользователем значение присутствовать в этих двух столбцах.

Можете ли вы поделиться точными определениями столбцов? zip_from - это столбец INT? И почему вы думаете, что это связано с PHP?

Nico Haase 09.01.2019 12:58

У вас есть zip_to = , но я думаю, вам нужен zip_to <=.

Cynical 09.01.2019 12:59

@NicoHaase: оба столбца - varchar.

user5443928 09.01.2019 12:59

@Cynical: Нет, ты тоже не работаешь.

user5443928 09.01.2019 13:00

Обратите внимание на SQL-инъекцию

Raymond Nijland 09.01.2019 13:01

Как пишет @Cynical - прямо сейчас вы проверяете почтовый номер, который больше 751001, но точно 751030. Это означает, что только 751030 будет работать

Stender 09.01.2019 13:03

также - поскольку это varchars, я не уверен, что вы можете использовать его как чистые числа? почему они не ссоры? если sql рассматривает их как строки, можете ли вы использовать числовое значение для проверки?

Stender 09.01.2019 13:07

Я думаю, вы можете, так как 'BALL' < 'water' вернет истину

Stender 09.01.2019 13:10

Вы должны преобразовать столбец, а затем сравнить значения, как здесь stackoverflow.com/a/19654296/7296317

Dinesh Kumar 09.01.2019 14:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
9
55
2

Ответы 2

Что ж, ваш запрос должен быть таким:

$sql = "select * from db_postcode where ".$post_code." BETWEEN zip_from and zip_to";

Я уже пробовал эту, но ту же проблему. Напомню, что оба столбца имеют тип данных varchar.

user5443928 09.01.2019 13:05

Пожалуйста, объясните Зачем, он должен быть таким и какие именно изменения потребовались

Nico Haase 09.01.2019 14:25

Ваше сравнение написано неправильно, вам нужно проверить, находится ли $post_code между zip_from и zip_to:

$sql = "select * from db_postcode where '$post_code' between zip_from and zip_to";

Обратите внимание, что это будет работать только в том случае, если все значения zip_from, zip_to и $post_code имеют одинаковую длину, в противном случае вы столкнетесь с проблемами, которые в строке сравнения, 2 > 100000. Если они не одинаковой длины, вы должны преобразовать их в целое число, чтобы сравнить их.

Другие вопросы по теме