gpt4 book ai didi

php - Foreach 和 while 循环不输出我获取的数据

转载 作者:行者123 更新时间:2023-11-29 02:21:14 24 4
gpt4 key购买 nike

我有以下两个准备好的语句。数据库连接和查询是正确的,我已经在 phpmyadmin 中测试了它们。我还在我的 while fetch 循环内部进行了测试,看看我是否正在提取我应该提取的数据,而我确实提取了。

问题出在我的 while 和 foreach 循环中,或者可能出在我的 num rows 语句中。我不确定我在那里做错了什么。

我收到这个错误:

Warning: mysqli::query() expects parameter 1 to be string, object given

对于这个 while 循环:

        while ($row2 = $result->fetch_assoc() ) {

我也收到了我的 else 声明..

    echo "<p>This topic does not exist.</p>";

即使信息正确回显,我还是认为我的循环是错误的?

有没有人看到我在循环中做错了什么?

$con = new mysqli("localhost", "", "", "");
if (mysqli_connect_errno()) {
throw new Exception("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* activate reporting */
$driver = new mysqli_driver();
try {
$cid = $_GET['cid'];
$tid = $_GET['tid'];
$userid = ( isset( $_SESSION['user'] ) ? $_SESSION['user'] : "" );
echo $cid . "<br>";
echo $tid;
//Prepare
if ($stmt = $con->prepare("SELECT * FROM forum_topics WHERE `category_id`=? AND `id`=? LIMIT 1")) {
$stmt->bind_param("ii", $cid, $tid);
$stmt->execute();
$stmt->bind_result($topic_id, $category_id, $topic_title, $topic_creator, $topic_last_user, $topic_date, $topic_reply_date, $topic_views);

if (!$stmt) {
throw new Exception($con->error);
}
}



while ($row = $stmt->fetch()) {

$stmt->store_result();
$numrows = $stmt->num_rows;
echo $numrows;
}
if($numrows == 1){
echo "<table width='100%'>";
if ( $_SESSION['user'] ) {
echo "<tr><td colspan='2'><input type='submit' value='Add Reply' onclick=\"window.location =
'forum_post_reply.php?cid=".$cid."$tid=".$tid."'\"> <hr />";
} else {
echo "<tr><td colspan='2'><p>Please log in to add your reply</p><hr /></td></tr>";
}
}


foreach($stmt as $row) {

//Prepared SELECT stmt to get forum posts
if($stmt2 = $con->prepare("SELECT `id`, `category_id`, `topic_id`, `post_creator`, `post_content`, `post_date` FROM forum_posts WHERE `category_id`=? AND `topic_id`=?")) {


$stmt2->bind_param("ii", $cid, $tid);
$stmt2->execute();
$stmt2->bind_result($post_id, $post_category_id, $post_topic_id, $post_creator, $post_content, $post_date);

if (!$stmt2) {
throw new Exception($con->error);
}
}
}

if ($result = $con->query($stmt)) {
while ($row2 = $result->fetch_assoc() ) {
echo "<tr><td valign='top' style='border: 1px solid #000000;'>
<div style='min-height: 125px;'>".$row['topic_title']."<br />
by ".$row2['post_creator']." - " .$row2['post_date']. "<hr />" . $row2['post_content'] ."</div></td>
<td width='200' valign='top' align='center' style='border: 1px solid #000000;'>User Info Here!</td></tr>
<tr><td colspan='2'><hr /></td></tr>";
}
} else {
echo "<p>This topic does not exist.</p>";
}
}
catch (Exception $e)
{
echo "Error: " . $e->getMessage();
}

最佳答案

如果您在浏览器中使用 ctrl-F 搜索 $stmt(并忽略 $stmt2),您会注意到 $stmt 是一个准备好的语句,一直到错误行。 $stmt 作为 prepare 的返回类型出现,被绑定(bind)并执行。

稍后你会:

if ($result = $con->query($stmt)) {

所以 $con->query() 需要一个字符串,而不是一个对象,不是吗?

来自manual .

并不是说在显微镜下就没有其他需要考虑的事情,但我希望这能大致回答您的错误消息。

编辑:

显然,您不能将 bind_result 与 select * 一起使用。阅读男性对这个问题的接受答案。他做了 2 个例子,1 个有 1 个没有选择 *。另请注意 store_result()

这是 link他的回答得到了相当多的赞成。

关于php - Foreach 和 while 循环不输出我获取的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31577315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com