Я создаю сайт для гипотетического арендного бизнеса, и я пытаюсь проверить доступные ресурсы в течение определенного промежутка времени, когда пользователь нажимает кнопку «Добавить в корзину». У меня возникают проблемы с SQL-запросом, который выполняется, в основном (я думаю) из-за того, что моя переменная $ product_id является целым числом, но столбцы, которые я хочу запросить, находятся в форме «item1», «item2» и т. Д.Проверить доступность инвентаря для имеющегося арендного фонда
Логика, которую я пыталась использовать, заключалась в том, чтобы вычесть нужное количество из числа, доступного в таблице, взять минимум этих значений за данный промежуток времени, а затем проверить, в какой-либо точке это число опустилось ниже нуля ,
Вот соответствующий код:
switch ($action) {
case 'view':
$cart = cart_get_items();
break;
case 'add':
$product_id = filter_input(INPUT_GET, 'product_id', FILTER_VALIDATE_INT);
$quantity = filter_input(INPUT_GET, 'quantity');
$pickup = filter_input(INPUT_GET, 'pickup');
$return = filter_input(INPUT_GET, 'return');
// validate the quantity entry
if ($quantity === null) {
display_error('You must enter a quantity.');
} elseif (!is_valid_number($quantity, 1)) {
display_error('Quantity must be 1 or more.');
}
// check for available inventory
$query = "SELECT MIN((SELECT CONCAT('item',:product_id)) - :quantity) FROM running_inventory WHERE date BETWEEN :pickup AND :return";
$statement = $db->prepare($query);
$statement->bindValue(':product_id', $product_id);
$statement->bindValue(':quantity', $quantity);
$statement->bindValue(':pickup', $pickup);
$statement->bindValue(':return', $return);
$statement->execute();
$available = $statement->fetch();
$num_avail = $available[0];
var_dump($num_avail);
$statement->closeCursor();
if ($num_avail - $quantity >= 0) {
cart_add_item($product_id, $quantity);
} else {
display_error('The indicated quantity of stock is not available for your rental period.');
}
$cart = cart_get_items();
break;
И это var_dump за $ доступно:
array(2) { ["MIN((SELECT CONCAT('item','6')) - '3')"]=> string(2) "-3" [0]=> string(2) "-3" } string(2) "-3"
Это, очевидно, просто вычитая $ количество от 0, но я не могу понять где именно проблема.
Итак, в чем проблема? –
Извините, я новичок в SO и немного разбросаны в данный момент. Я редактировал сообщение с var_dump. – AndrewCC
Вы все еще не объяснили проблему. Какую ценность вы ожидаете вернуть? Почему вы вычитаете число из строки? Конечно, это не сработает. Почему вы используете функцию MIN по одному значению? Это ничего не сделает. –