php - MySQLi 绑定(bind)结果并获取多行

标签 php mysqli prepared-statement

我正在尝试使用 MySQLi 和绑定(bind)/获取来遍历一组结果。

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->bind_result($tmp);

$query->bind_result(&$tmp);

语法还有什么问题吗?

有没有更简单的方法来做到这一点?也许是一种获取对象的方法?

最佳答案

你的 while 语句末尾有一个分号:

while($query->fetch());

(当然,这使得 $query->fetch() 评估直到它不为真,而无需为每一圈运行大括号之间的代码)

关于php - MySQLi 绑定(bind)结果并获取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2374992/

相关文章:

php - 如何捕获 MySQLi (PHP) 中的错误并继续执行?

php - 是否可以在准备好的语句中使用 SELECT * ?

php - 带有准备语句的 Mysql 更新查询给出错误

java - 未使用正确的查询执行PreparedStatement

php - 如何为 PhpStorm 注释从不返回控制权的 PHP 函数/方法

php - 几个模拟连接对数据库的影响

php - 在 PHP 中使用 foreach 解析 JSON

php - php 和 MySQLi 的递归菜单

php - mysqlnd 没有 mysqli_stmt_get_result()

php - 使用 laravel 使用 2 列按查询排序