gpt4 book ai didi

php - 在带循环的准备好的语句后输出数据时出现问题

转载 作者:行者123 更新时间:2023-11-29 12:05:22 26 4
gpt4 key购买 nike

我在弄清楚下面代码中的 while 和 foreach 循环中做错了什么时遇到了一些重大困难。我倾向于混合面向对象和过程 mqsqli,但每次我认为我做对了,我都会收到错误。

我在这段代码的循环中做错了什么?

现在我收到此错误

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

完整代码

try {
$con = new mysqli("localhost", "", "", "");
if (mysqli_connect_errno()) {
throw new Exception("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$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->fetch();

if (!$stmt) {
throw new Exception($con->error);
}
}
$stmt->store_result();
$numrows = $stmt->num_rows;
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 * FROM forum_posts WHERE `category_id`=? AND `topic_id`=?")) {
//var_dump($stmt2);

$stmt2->bind_param("ii", $cid, $tid);
$stmt2->execute();
}
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>";
}

最佳答案

if ($stmt = $con->prepare("SELECT * FROM forum_topics WHERE `category_id`=? AND `id`=? LIMIT 1")) {

$stmt->bind_param("ii", $cid, $tid);
//$stmt->fetch();

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

$stmt->store_result();
$numrows = $stmt->num_rows;

在循环 foreach($stmt as $row) { 之前,您实际上不会执行 $stmt

你会想把它放在那里:

$stmt->execute()

你的逻辑有点乱。您看起来像是在循环访问从未执行过的查询的结果,然后尝试在此处重新查询原始 $stmt:

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

编辑:与您聊天后,您需要编辑原始查询以查询特定列,以便您可以像这样引用它们:

if ($stmt = $con->prepare("SELECT topic_creator FROM forum_topics WHERE `category_id`=? AND `id`=? LIMIT 1")) {

...

$stmt->bind_result($topic_creator); 
while ($stmt->fetch()) {
echo "TC: " . $topic_creator . "<br>";
}

您可以将其应用于 while 循环中的子查询。

关于php - 在带循环的准备好的语句后输出数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31570715/

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