mysqli用while循环准备了语句


mysqli prepared statement with while loop

我正在尝试使用mysqli进行一个极其简单的查询。它把我逼疯了!

我只希望$data是sql查询中的值的数组。

这是我的密码。。。

$req = $app->request();
$hashtag = $req->get('hashtag');
require_once 'Slim/lib/database.php';
$db = connect_db();
$statement = $db->prepare("SELECT `content` FROM `posts` WHERE `content` LIKE ?");
$newhashtag = '%#' . $hashtag . '%';
$statement -> bind_param("s", $newhashtag);
$statement -> execute();
$statement -> bind_result($result);
while ( $row = mysqli_fetch_array($statement) ) {
    $data[] = $row;
}
print_r($data);
$statement -> close();

我只得到一个错误mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given,在fetch_array 上使用$result$statement没有什么区别

你可以试试这个:

$statement = $db->prepare("SELECT `content` FROM `posts` WHERE `content` LIKE ?");
$newhashtag = "%#$hashtag%";
$statement->bind_param("s", $newhashtag);
$statement->execute();
$result = $statement->get_result();
while ($row = $result->fetch_assoc())
{
    $data[] = $row;
}

这使用了get_result()函数,该函数用于从准备好的语句中获取结果。

这是在while循环之外初始化的,并分配给一个新变量,在本例中为$result
然后CCD_ 8被分配给CCD_。将每一列作为数组中的键进行访问,以便$row["content"]将返回该列下每一行的内容

要从准备好的语句中获取结果对象,可以使用get_result()。然后可以使用foreach循环来迭代该对象。

$statement->execute();
$result = $statement->get_result();
foreach ($result as $row) {
    print_r($row);
}

如果需要将所有行提取到一个数组中,可以使用fetch_all()

$statement->execute();
$result = $statement->get_result();
$data = $result->fetch_all(MYSQLI_ASSOC);
print_r($data);

您还可以通过将每一列绑定到一个变量来获取数据。首先,指定要使用bind_result()填充的变量,然后调用fetch()来填充该变量。

$statement->execute();
$statement->bind_result($content);
while ( $statement->fetch() ) {
    // Every time fetch is called a value from the next row will be inserted into $content
    $data[] = $content;
}
print_r($data);