2017-03-12 60 views
-1

我有一个成功连接到MySQL数据库,并包含两个mysqli的查询的PHP脚本。第一个查询按预期运行。第二个查询将只能随声附和:我想我需要的东西free(),但我不知道什么,我试图释放的第一个结果。PHP:循环错误的mysqli阵列

我相信这是我的一个简单的错误。我感谢您的帮助!

pffages:

aid | aTitle | aActive | aVersion 
--------------------------------- 
3 | 16-17 | 1  | 1  
4 | 14-15 | 1  | 1 
5 | 15-16 | 1  | 1 

pffchecklist(正常工作用PHP):

lid | lTitle | lText | aid | cid 
-------------------------------- 
1 | Check1 | hi | 3 | 1 
2 | Check2 | world | 4 | 1 

ulist.php:

<?php 
include('connections/conn.php'); 

$getList = $_GET['lid']; 

$testsql = 'SELECT * FROM pffchecklist where lid=' . $getList . ';'; 
$testresult = mysqli_query($conn, $testsql); 
$getrow = mysqli_fetch_array($testresult); 

echo $getrow["lTitle"]; //works 
echo $getrow['lText']; // works 

$getAgesSql = 'SELECT * FROM pffages where aActive = 1;'; 
$getAgesResult = mysqli_query($conn,$getAgesSql); 
$getAges = mysqli_fetch_array($getAgesResult); 
foreach($getAges as $theAges){ 
    echo $theAges['aTitle']; // returns 33111111 
    echo $theAges['aid']; // returns 33111111 
} 
?> 

回答

0
<?php 
include('connections/conn.php'); 

$getList = $_GET['lid']; 

$testsql = 'SELECT * FROM pffchecklist where lid=' . $getList . ';'; 
$testresult = mysqli_query($conn, $testsql); 
$getrow = mysqli_fetch_array($testresult, MYSQLI_BOTH); 

echo $getrow["lTitle"]; //works 
echo $getrow['lText']; // works 

$getAgesSql = 'SELECT * FROM pffages where aActive = 1;'; 
$getAgesResult = mysqli_query($conn,$getAgesSql); 
while($getAge = mysqli_fetch_array($getAgesResult, MYSQLI_BOTH)){ 
    $getAges[] = $getAge; 
} 
foreach($getAges as $theAges){ 
    echo $theAges['aTitle']; // returns 33111111 
    echo $theAges['aid']; // returns 33111111 
} 
?> 
+0

同样的结果... 33111111 –

+0

我什么也没得到与编辑。 –

1

$getages是由myqli_fetch_array返回的数组。这将是一维数组,具有标量值。要查看包含(调试),我们可以用var_dump

$getAges = mysqli_fetch_array($getAgesResult); 

-- for debugging, show what is returned 
var_dump($getAges); 

-- show the values returned for the 'aTitle' and 'aid' columns 
echo $getAges['aTitle']; 
echo $getAges['aid']; 

我怀疑这是我们所追求的。


它可能使用一个foreach循环访问数组的内容。例如:

-- this displays the values in the array but not the key 
foreach($getAges as $theAges) { 
    echo $theAges; 
} 

使用默认的MYSQLI_BOTH,我们将得到每个值的两个副本。一组用数字指标,而另一组则列名

-- this will show the key along with the value 
foreach($getAges as $key => $val) { 
    echo "{$key} => {$val} "; 
} 

随访

“所以,我需要它返回援助和aTitle的价值观 - 4条如何解决这是为了做到这一点?“

我会这样做。规范是针对“四条记录”,我们认为这意味着“四行”......如果这是我们要显示的行数的上限,我们可以在查询中添加一个LIMIT 4子句,以避免返回多于四条行。我们还可以添加ORDER BY子句,以便查询更具确定性,而不是MySQL以任何顺序返回行。

$sql = 'SELECT p.aid, p.aTitle FROM pffages p WHERE p.aActive = 1 ORDER BY p.aid LIMIT 4'; 

鉴于原始代码中使用了什么,我们将坚持程序风格。这是我会怎么做:

if(!$sth = mysqli_query($conn,$sql)) { 
    // error occurred 
    die(mysqli_error($conn)); 
} 
$i = 0; 
while($row = mysqli_fetch_array($sth, MYSQLI_ASSOC)) { 
    $i++; 
    echo "row=" . $i . " aid=" . $row['aid'] . " aTitle=" . $row['aTitle'] . "\n"; 
} 

(该$i的使用是一样的示范:。计数的行数取的次数通过循环引用$i可以被删除,他们AREN “T实际需要。)

if(!$sth = mysqli_query($conn,$sql)) { 
    die(mysqli_error($conn)); 
} 
while($row = mysqli_fetch_array($sth, MYSQLI_ASSOC)) { 
    echo "aid=" . $row['aid'] . " aTitle=" . $row['aTitle'] . "\n"; 
} 
+0

var_dump返回数组(8){[0] => string(1)“3”[“aid”] => string(1)“3”[1] => string(5)“16-17”[“ aTitle“] => string(5)”16-17“[2] => string(1)”1“[”aActive“] => string(1)”1“[3] => string(1) 1“[”aVersion“] => string(1)”1“} –

+0

所以'mysqli_fetch_array'正在返回一个数组,正如我们所期望的那样。从数组的内容中,我们可以看到查询返回四列:(aid,aTitle,aActive,aVersion)。并且第一行返回的值是('3','16-17','1','1')。因为MYSQLI_BOTH是mysqli_fetch_array的默认模式,所以我们得到每列的两个副本,所以返回数组中共有八个元素。 – spencer7593

+0

所以,我需要它来返回aid和aTitle的值 - 4条记录。我如何解决这个问题呢? –

0
$testsql = 'SELECT * FROM pffages order by aTitle;'; 
$testresult = mysqli_query($conn, $testsql); 

while($testrow = mysqli_fetch_array($testresult)){ 
    echo $testrow['aTitle']; 
}