mysqli选择id返回0(处理数据库)


mysqli select id returning 0 (working on database)

我一直在寻找其他问题,但这似乎是我自己的代码出了问题,我无法自己识别问题。

我成功执行了以下查询,并返回了我要求的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;
}