Я столкнулся с одной проблемой. Мне нужно проверить значение, которое должно присутствовать в двух значениях столбца с использованием 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_to = , но я думаю, вам нужен zip_to <=.
@NicoHaase: оба столбца - varchar.
@Cynical: Нет, ты тоже не работаешь.
Обратите внимание на SQL-инъекцию
Как пишет @Cynical - прямо сейчас вы проверяете почтовый номер, который больше 751001, но точно 751030. Это означает, что только 751030 будет работать
также - поскольку это varchars, я не уверен, что вы можете использовать его как чистые числа? почему они не ссоры? если sql рассматривает их как строки, можете ли вы использовать числовое значение для проверки?
Я думаю, вы можете, так как 'BALL' < 'water' вернет истину
Вы должны преобразовать столбец, а затем сравнить значения, как здесь stackoverflow.com/a/19654296/7296317






Что ж, ваш запрос должен быть таким:
$sql = "select * from db_postcode where ".$post_code." BETWEEN zip_from and zip_to";
Я уже пробовал эту, но ту же проблему. Напомню, что оба столбца имеют тип данных varchar.
Пожалуйста, объясните Зачем, он должен быть таким и какие именно изменения потребовались
Ваше сравнение написано неправильно, вам нужно проверить, находится ли $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. Если они не одинаковой длины, вы должны преобразовать их в целое число, чтобы сравнить их.
Можете ли вы поделиться точными определениями столбцов?
zip_from- это столбецINT? И почему вы думаете, что это связано с PHP?