我正在尝试在PHP代码中的while循环中运行if
和else if
。
代码如下所示:
<?php
$sql = "SELECT * FROM table ORDER BY id";
$query = mysqli_query($db_conx, $sql);
$productCount = mysqli_num_rows($query);
if ($productCount > 0) {
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
$deviceType = $row["deviceType"];
if($deviceType == 'iPhone' || $deviceType == 'iPad'){
echo 'IOS';
}else if($deviceType == 'Android'){
echo 'Android';
}
}
} else {
}
?>
上面的代码工作(有点),但不像我期望的那样。
举个例子,假设我在MYSQL数据库中有2行。
像这样:id deviceType
1 Android
2 iPhone
当我运行上面的PHP代码时,我会在我的页面上回显:
IOS
IOS
Android
Android
但我在数据库中只有2行,所以结果应为:
IOS
Android
有人可以就此问题提出建议吗?
答案 0 :(得分:1)
这个问题显然是在歪曲您的实际代码/数据。
如果您的数据库表有2行,但是您正在接收4行,那么onus不在fetch
ing函数上,而是在您的查询或数据库表数据上。
如果您的实际查询是在您的问题中发布的,那么您的表数据包含两行以上。
如果您的实际查询与您发布的内容不同(例如,使用自己的副本加入表格),那么您的数据就可以了,您的查询就会失败。
无论您使用的是mysqli_fetch_array($result)
,mysqli_fetch_array($result,MYSQLI_ASSOC)
还是mysqli_fetch_assoc($result)
,您的while()
循环都只会为每行数据进行一次迭代。
结果集fetch
函数的差异:
<强> mysqli_fetch_array($结果)强>:
array(0=>'1', 'id'=>'1', 1=>'Android', 'deviceType'=>'Android') // 1 row w/ 4 elements
array(0=>'2', 'id'=>'2', 1=>'iPhone', 'deviceType'=>'iPhone') // 1 row w/ 4 elements
mysqli_fetch_array($ result,MYSQLI_ASSOC)或 mysqli_fetch_assoc($ result):
array('id'=>'1', 'deviceType'=>'Android') // 1 row w/ 2 elements
array('id'=>'2', 'deviceType'=>'iPhone') // 1 row w/ 2 elements
我将重写您的代码并实施一些好的做法:
if($result=mysqli_query($db_conx,"SELECT `deviceType` FROM `table` ORDER BY `id`;")){
if(mysqli_num_rows($result)){
while($row=mysqli_fetch_assoc($result)){
echo ($row["deviceType"]=="Android"?"Android":"IOS"); // inline condition is a personal preference
}
}else{
echo "No rows in `table`.";
}
}
$sql
或$query
;并将查询命名为结果变量$result
。SELECT
列;您的案件不需要*
。`
换行,但这样做可以避免与MySQL关键字的任何潜在冲突。$result
变量声明为false
或[resultset]
。$result
是否为真。 (例如mysqli_num_rows()
和mysqli_fetch_assoc()
)。if(mysqli_num_rows($result)){
会检查非假名值 - 我的意思是0
等同于false
,任何大于0
的内容都是true
。< / LI>
答案 1 :(得分:0)
您的代码似乎完全正常。但是,您获得的项目数量超过预期,而不是预期的输出。如果我没有弄错,这意味着您在数据库表中有重复的deviceType
。 $productCount
的值可能为4.如果您使用此查询,则可以获得两个值:
SELECT DISTINCT `deviceType` FROM `table` ORDER BY `id`
但是虽然这应该会修复你得到的输出,但你的数据仍然会有重复数据,所以你可能想要查看表格的数据以及它的创建方式,找出并解决问题。
答案 2 :(得分:-1)
答案非常简单,你使用while循环更改此行
获取结果两次while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
到
while($row = mysqli_fetch_assoc($query)){
然后它会正常工作,你可以看到购买iPhone iPhone安卓系统的命令,即两次而不是每次循环一次