0

我有一个 MySQL 查询,它在运行时返回 3 个随机行。我想将每一行存储在一个数组中,该行的每一列都是数组的不同部分。希望我很清楚。这是我到目前为止的位置。

$result = mysql_query("SELECT NAME,AUTHOR,CITY FROM TESTIMONIALS ORDER BY RAND() LIMIT 3");
$row = mysql_fetch_array($result);

问题在于它将所有内容都存储在 $result 中,而且我不知道如何引用不同的列。我这样做是为了最终可以将我想要的指定随机条目打印到 9 个不同的 DIV 中。

4

3 回答 3

2

尝试:

$array = Array();

$result = mysql_query("SELECT NAME,AUTHOR,CITY FROM TESTIMONIALS ORDER BY RAND() LIMIT 3");
while ($row = mysql_fetch_array($result)) {
    $array[] = $row;
}
于 2012-10-07T22:21:18.460 回答
1

您可以使用$row['COLUMNAME']来获取列值。
请注意,COLUMNAME 将区分大小写。

例如:

$result = mysql_query("SELECT NAME,AUTHOR,CITY FROM TESTIMONIALS ORDER BY RAND() LIMIT 3");
while($row = mysql_fetch_array($result)) {
    echo 'Name: ' . $row['NAME'] . '<br/>';
    echo 'Author: ' . $row['AUTHOR'] . '<br/>';
}

另外,请阅读php.net 手册页上的大红色通知:
不鼓励使用此扩展。
相反,应该使用MySQLiPDO_MySQL扩展。另请参阅 MySQL:选择 API 指南和相关的常见问题解答以获取更多信息。

于 2012-10-07T22:25:09.907 回答
0

考虑使用准备好的语句,因为 mysql_ 已被弃用。如果您粗心或缺乏经验并且没有正确转义查询字符串,它也容易受到 SQL 注入的影响。

这是使用mysqli_的解决方案:

$link = mysqli_connect("localhost", "user", "password", "database") or die(mysqli_error($link));
$stmt = mysqli_stmt_init($link);
$query = 'SELECT NAME,AUTHOR,CITY FROM TESTIMONIALS ORDER BY RAND() LIMIT 3';
$arrTestimonials = array();   

if (mysqli_stmt_prepare($stmt, $query)) {
    mysqli_stmt_bind_result($stmt, $out_name, $out_author, $out_city);
    mysqli_stmt_execute($stmt);

    while (mysqli_stmt_fetch($stmt)) {
        $arrTestimonials[]['name'] = $out_name;
        $arrTestimonials[]['author'] = $out_author;
        $arrTestimonials[]['city'] = $out_city;
    }
} // error preparing statement 

数组的结构如下:

Array
(
    [0] => Array
        (
            [name] => Name 1
            [author] => Author 1
            [city] => City 1
        )

    [1] => Array
        (
            [name] => Name 2
            [author] => Author 2
            [city] => City 2
        )

    [2] => Array
        (
            [name] => Name 3
            [author] => Author 3
            [city] => City 3
        )

)   
于 2012-10-07T22:40:32.197 回答