我正在为数据库查询创建函数:
function my_db_query($query_data) {
$db_query = mysqli_query($query_data, $db_connection) or die(mysqli_error());
if(mysqli_num_rows($db_query) > 0) {
return mysqli_fetch_object($db_query);
} else {
return false;
}
}
和
function article( $ID='' ) {
$db_query_string = "SELECT * FROM `articles` WHERE id='".$ID."'";
$db_query = my_db_query($db_query_string);
return $db_query;
}
但是当我调用函数
时while($content = article(5)) {
echo $content->title;
}
它连续显示标题,PHP不会停止运行。
如何让它停止?因为它不像我运行while ($content = mysqli_fetch_object($db_query))
时那样。
PS:数据库中可能有多个id为5的行。
非常感谢!
答案 0 :(得分:1)
问题在于my_db_query()
的设计。您的函数进行SQL查询并返回单个结果。每次调用函数时,它都会生成一个不知道先前查询的新查询,因此它将返回与之前相同的结果。您需要分离查询和获取操作。换句话说:只需删除my_db_query()
函数并使用PHP提供的函数。
编辑。
另一种选择:一次获取所有行并循环遍历它们。
function my_db_query($query_data) {
$db_query = mysqli_query($query_data, $db_connection) or die(mysqli_error());
if(mysqli_num_rows($db_query) > 0) {
// return all rows at once
return mysqli_fetch_all($db_query);
} else {
return false;
}
}
function article( $ID='' ) {
$db_query_string = "SELECT * FROM `articles` WHERE id='".$ID."'";
$db_query = my_db_query($db_query_string);
return $db_query;
}
$articles = article(5);
// loop through the articles.
foreach($articles as $content) {
echo $content->title;
}
答案 1 :(得分:0)
因为无限循环。根据你的代码它将只返回一个无限时间的结果。
您使用参数article
调用函数5
,返回始终为true。而不是必须使用{/ 1}}语句,如
IF
答案 2 :(得分:0)
if($content = article(5)) {
echo $content->title;
}
?您在无限循环中进行查询,每次重播时查询,如果ID = 5的文章存在,结果可能永远不会为空
编辑:我刚刚看到了另一个答案,好吧,您要查看数据库,ID应该是唯一的,或者使用元组键
EDIT2:你可以使用if语句和你的文章' function可以返回包含所有行的数组
答案 3 :(得分:0)
while ($content = article(5))
这将在每次循环迭代中执行!在每次循环迭代中将一次又一次地调用article(5)
。它一次又一次地查询数据库并且每次都返回一个新的结果对象。它根本不起作用。你不能将调用埋在mysqli_fetch_object
三层深处的函数调用中;你必须直接在循环中调用mysqli_fetch_object
。
答案 4 :(得分:0)
让我们试着简单:
<?php
$db_query_string = "SELECT * FROM `articles` WHERE id=5";
$db_query = mysqli_query($db_query_string, $db_connection) or die(mysqli_error());
if (mysqli_num_rows($db_query) > 0) {
while ($content = mysqli_fetch_object($db_query)) {
echo $content->title;
}
}