这是我的代码的相关部分:
$json = file_get_contents('php://input');
$obj = json_decode($json, true);
$device_id =$obj['device_id'];
$num =$obj['sensor_value'];
$sensor_value =(int)$num;
if ($sensor_value > 100){
$sql = "INSERT INTO rr_emergency (device_id,sensor_value) VALUES('$device_id','$sensor_value');";
$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}
else {
$sql = "INSERT INTO general_logging (device_id,sensor_value) VALUES('$device_id','$sensor_value');";
$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}
else
语句可以正常工作。但是,当$sensor_value
大于100时,我的语句的if
部分永远不会触发。我在这里缺少什么?
答案 0 :(得分:2)
作为语言构造的if/else
极不可能随机破坏。但是,您可以做一些事情来确定您是否按照自己的想法行事:
$json = file_get_contents('php://input');
$obj = json_decode($json, true);
$device_id =$obj['device_id'];
$num =$obj['sensor_value'];
$sensor_value =(int)$num;
echo "num=$num\n"; //Are you actually getting a value from $obj?
echo "sensor_value=$sensor_value\n"; //Compare to num. Is it being cast correctly?
if ($sensor_value > 100){
echo "Inside 'True' clause\n";
try {
$sql = "INSERT INTO rr_emergency (device_id,sensor_value) VALUES('$device_id','$sensor_value');";
$result = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
} catch (Exception $e) {
echo "Caught exception trying to execute sql: ", $e->getMessage(), "\n";
}
}
else {
...
}
通过执行这些操作,我们确认所有内容都按预期运行 。这可能会揭示问题。
关于投射的说明
要从字符串转换为整数,您应该使用intval
:
$sensor_value = intval($num);