我正在尝试使用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->bind_result($tmp);
至
$query->bind_result(&$tmp);
语法还有其他问题吗?
有更简单的方法吗?也许是一种获取对象的方法?
解决方法:
在while语句的末尾有一个分号:
while($query->fetch());
(当然,如果没有在每一圈的大括号之间运行代码,那么会对$query-> fetch()进行求值,直到它为止.
标签:php,mysqli,prepared-statement
来源: https://codeday.me/bug/20190621/1258984.html