代码之家  ›  专栏  ›  技术社区  ›  Josh K

mysqli绑定结果并获取多行

  •  4
  • Josh K  · 技术社区  · 15 年前

    我尝试使用mysqli和bind/fetch循环一组结果。

    static function getConnection() 
    {
        if (!isset(self::$db_conn)) 
        {
            self::$db_conn = new mysqli(self::$DBSERVER,self::$DBUSER,self::$DBPASS, ModelBase::$DBNAME) or die(mysql_error(0)." Error handling database connection. ");
        }
        return self::$db_conn;
    }
    

    上面是getConnection()函数。它位于此类继承的ModelBase类中。

    $term = "%".$term."%";
    $con = ModelBase::getConnection();
    $sql = "SELECT name FROM cities WHERE name LIKE ? LIMIT ?";
    $query = $con->prepare($sql) or die("Error preparing sql in City ".parent::$db_conn->error);
    $query->bind_param("si", $term, $limit) or die("Error binding params in City ".parent::$db_conn->error);
    $query->execute() or die("Error executing query in City");
    
    $tmp = "";
    $query->bind_result($tmp);
    while($query->fetch());
    {
        error_log($tmp);
        echo($tmp."\n");
    }
    $query->close();
    

    然而,我得到的只是最后的结果,而且只有一次。结果应该不止一个,当我在phpmyadmin中检查以下查询或在提示下获取多行时。

    SELECT name FROM cities WHERE name LIKE %d% LIMIT 150
    

    如果我改变了,这个问题就不会出现了

    $query->绑定结果($tmp);

    $query->绑定结果(&$tmp);

    语法还有什么问题吗?

    有更简单的方法吗?也许是一种获取物体的方法?

    1 回复  |  直到 14 年前
        1
  •  5
  •   blazer    14 年前

    while语句末尾有一个分号:

    while($query->fetch());
    

    (当然,这会使$query->fetch()在不在每圈的花括号之间运行代码的情况下进行计算,直到它不是真的为止)