我一直在寻找其他问题,但这似乎是我自己的代码出了问题,我无法自己识别问题。
我成功执行了以下查询,并返回了我要求的id列:
SELECT city_id FROM location_city WHERE c_name = 'cityname'
然而,当我使用我的函数来检查城市是否存在时,无论我通过哪个现有城市作为参数,我都会得到一个0:
// check if city already exists
public function is_city($city) {
$mysqli = $this->aet->getAetSql();
if ($stmt = $mysqli->prepare('SELECT city_id FROM location_city WHERE c_name = ?')) {
$stmt->bind_param('s', $city);
$stmt->execute();
$stmt->store_result();
$stmt->num_rows === 1 ? $stmt->bind_result($city) : $city = FALSE;
}
return $city;
}
我一直在做一些测试:
$city = 'Elche';
echo $functions->is_city($city);
if (FALSE !== $functions->is_city($city)) echo 'NOT FALSE'; else echo 'FALSE';
// 0
// NOT FALSE
我还检查了$stmt->execute()
,它返回TRUE,没有错误(echo $stmt->error;
)
我还有另一个生成城市列表的函数,它运行正常。唯一的区别是我没有使用$stmt->store_result();
和$stmt->num_rows
。我试着在is_city()
中评论这两个,但仍然不起作用。
有什么想法吗?谢谢
这应该可以解决您的问题:
// check if city already exists
public function is_city($city) {
$mysqli = $this->aet->getAetSql();
$stmt = $mysqli->prepare('SELECT city_id FROM location_city WHERE c_name = ?');
if ( FALSE == $stmt ) {
return FALSE;
}
$stmt->bind_param('s', $city);
$stmt->execute();
$stmt->bind_result( $city_id );
if ( $stmt->fetch() ) {
return $city_id;
}
return $city_id;
}