Во время AsyncTask я прохожу среди других числовой строки w1:SQL странно сравнение числовых строк
params.add(new BasicNameValuePair("weight1", w1));
на следующий сценарий PHP:
<?php
require("config.inc.php");
$query_params = null;
$query = " SELECT onoma01 , epitheto01 , email01 ,username1,startPoli1, finalPoli1,
eidosmetaf1, weight1 , depDate1 , depTime1, tilefono01
FROM customer ,registration1
where
(:sp1='empty' or customer.startPoli1 = :sp1) and
(:w1='empty' or customer.weight1 < :w1) and
( :em1='empty' or customer.eidosmetaf1 = :em1) and
( :fp1='empty' or customer.finalPoli1 = :fp1) and
( :dD1='empty' or customer.depDate1 = :dD1) and
(customer.username1 = registration1.username01)";
$query_params = array(
':sp1' => $_POST['startPoli1'],
':w1' => $_POST['weight1'],
':em1' => $_POST['eidosmetaf1'],
':fp1' => $_POST['finalPoli1'],
':dD1' => $_POST['depDate1']
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error2. Please Try Again!";
die(json_encode($response));
}
$results = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$results[] = array(
'onoma' => $row['onoma01'],
'epitheto' => $row['epitheto01'],
'email' => $row['email01'],
'username1' => $row['username1'] ,
'startPoli1' => $row['startPoli1'],
'finalPoli1' => $row['finalPoli1'],
'eidosmetaf1' => $row['eidosmetaf1'],
'weight1' => $row['weight1'] ,
'depDate1' => $row['depDate1'],
'depTime1' => $row['depTime1'],
'tilefono1' => $row['tilefono01']
);
}
echo json_encode(array('select_itin_results' =>$results));
?>
я спрашиваю из базы данных для возврата строки, которая включает вес меньше w1. Мой дб включает в себя весовые коэффициенты:
(100 , 200 , 350 ,2000)
Когда я установить w1 = 400, он возвращает все выше цифры, включая 2000. Кажется, что он сравнивает номер два номера по номеру (4 400 больше, чем 2 от 2000 года). Как получилось; (Обратите внимание, что столбец веса в базе данных имеет тип varchar.T попытался изменить на int без эффекта. Также я попытался отличить $ _POST ['weight1'] как int, но ничего. Спасибо
Вы делаете сравнения в SQL, а не PHP, так что это не проблема сравнения PHP. И, конечно, если вы используете varchars для хранения чисел, база данных также может выполнять сравнения как строки. Вы можете присвоить значения цифрам, а затем выполнить сравнение. –
Какие РСУБД это? Добавьте тег, чтобы указать, используете ли вы 'mysql',' postgresql', 'sql-server',' oracle' или 'db2' - или что-то еще. –