1

我有以下代码。我标记的东西似乎block 1block 2没有一起工作,但是如果我摆脱另一个,一个就可以了;在检查使用时,print_r. 我对 php 相当陌生,想知道是否有人能指出我哪里出错了。我以前在其他地方工作过,但丢失了文件。提前谢谢了。

PS:我知道尽早进入 PDO 和 mysqli 是个好主意。但我只想先掌握基础知识。

<?php


//Connect to database

$connect = mysql_connect ("localhost","root","password");
$db = mysql_select_db("project");


//Find top 100 most popular images

$pop = mysql_query("


SELECT * FROM users ORDER BY pop DESC LIMIT 2

");

//Define local variables for images to show

//block 1//

$images = array();
while ($row = mysql_fetch_array($pop)) {
    $images[] = $row['image'];
    }

//block2//

$links = array ();
while ($row = mysql_fetch_array($pop)){
$links[] = $row['username'];
}

?>
4

4 回答 4

4

mysql_data_seek将起作用:

$images = array();
while ($row = mysql_fetch_array($pop)) {
    $images[] = $row['image'];
}

mysql_data_seek( $pop, 0 );

$links = array ();
while ($row = mysql_fetch_array($pop)){
    $links[] = $row['username'];
}

但是,更好/更清洁的解决方案是在第一个循环期间将两个值放入各自的数组中:

$links = array();
$images = array();
while ($row = mysql_fetch_assoc($pop)) {
    $images[] = $row['image'];
    $links[] = $row['username'];
}

或者,甚至更清洁 - 将一个数组添加到您的数组中:

$avatars = array();
while ($row = mysql_fetch_assoc($pop)) {
    array_push(
        $avatars, 
        array('image' => $row['image'], 'username' => $row['username'])
    );
}

var_dump($avatars);
于 2012-12-08T12:06:05.887 回答
1

首先,请不要mysql_*在新代码中使用函数。它们不再被维护,并且已经开始弃用过程。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

mysql_data_seek($pop, 0)在两个循环之间尝试使用,while或用以下代码替换您的代码:

$images = array();
$links = array();
while ($row = mysql_fetch_array($pop)) {
    $images[] = $row['image'];
    $links[] = $row['username'];
}
于 2012-12-08T12:05:50.120 回答
0

您已经在第一个块中迭代了整个结果集,您需要通过执行以下操作重新查找指向两个代码块之间结果集开头的指针:

mysql_data_seek($pop, 0);
于 2012-12-08T12:09:23.267 回答
-2

语法错误。

while ($row = mysql_fetch_array($pop, MYSQL_ASSOC))
于 2012-12-08T12:14:21.950 回答