У меня небольшие проблемы с тем, чтобы заставить PDO работать так, как мне нужно, чтобы он работал при обработке целочисленного значения 0.
В системе фиктивных ордеров final_status
0 представляет успешно размещенный ордер.Ошибки с порядком приводят к ненулевому целому числу final_status
, например, 14, 5 и т. Д.Для неполных заказов требуется фактическое значение NULL final_status
Вот пример структуры таблицы:
CREATE TABLE `order_status` (
`order_id` int(10) NOT NULL,
`final_status` int(10) DEFAULT NULL,
`date_status` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Когда заказ обновляется, я сталкиваюсь с проблемой, когда PDO устанавливает final_status
от 0 до NULL или устанавливает фактические значения NULL / blank в 0 (в зависимости от того, какую константу я объявляю в операторе bind).
Итак, предполагая:
$final_status = 0000;
$order_id = 123456;
Запрос на обновление:
try
{
$q = "
UPDATE
order_status
SET
final_status = :final_status
WHERE
order_id = :order_id
";
$stmt = $dbx_pdo->prepare($q);
$stmt->bindValue(':final_status', !empty($final_status) ? $final_status : NULL, PDO::PARAM_NULL);
$stmt->bindValue(':order_id', !empty($order_id) ? $order_id : NULL, PDO::PARAM_INT);
$stmt->execute();
$stmt->closeCursor();
} catch(PDOException $err) {
error_handler();
}
Если я использую PARAM_NULL для первой константы bindParam, значения '0000' или пустые значенияпереводятся в NULL, что создает ложный минус.
Если я использую PARAM_INT, значения '0000' или пустые значения преобразуются в 0, что создает ложный положительный результат и является плохим.
Итак, виновник определения таблицы или есть способ сделать то, что я хочу, с помощью INT?