【问题标题】:While loop php arraysWhile循环php数组
【发布时间】:2012-08-16 05:48:16
【问题描述】:

我有三个 php 数组,我正在填充从 msql 查询返回的信息。前两个数组完全填满了所需的信息,但最后一个数组没有填满。唯一输入的是“v”。如果我不将其设为数组而仅将其设为单个值,则它可以完美运行,但是当我将其设为数组时,它会停止工作。如果您有任何想法,谢谢。

$query = mysql_query("SELECT * FROM chanels WHERE cname = '$cname' ");
$numrows = mysql_num_rows($query);

while($row = mysql_fetch_array($query))
{
    $videolocation[$counter2] = $row['videolocation'];
    $title[$counter2] = $row['title'];
    $imagelocation[$counter2] =  $row['videoimagelocation'];
    $counter2++;

}

ImageLocation 数组是一个不起作用,而另外两个则完全填满。我检查了拼写,所有内容都输入正确。

【问题讨论】:

  • 什么是$counter2?您也可以使用单个数组来存储所有三个值。为什么要使用 3 个数组?
  • 使用var_dump向我们展示最后一种情况下$row的内容。其次,请不要使用mysql_*函数,它是deprecated (see red box),容易被sql注入。使用 PDO 或 MySQLi。
  • 检查 print_r($row);包含此关键视频图像位置?
  • $counter2 = 0 并用作索引值

标签: php mysql arrays while-loop


【解决方案1】:

不要使用fetch_array,而是使用mysql_fetch_assoc 作为您的方法,这样您就可以带回带有数组中键的行,这些行在结果中被命名为列 - 像这样:

while ($row = mysql_fetch_assoc($result)) {
    echo $row["videolocation"];
    echo $row["title"];
    echo $row["videoimagelocation"];
}

此外,您可能应该放弃旧的 mysql_* 函数并修改新的闪亮的 PDO 函数。这些将使您以更安全的方式进行连接,并提供更大的灵活性。

编辑:当你带回一个 assoc 数组时,它仍然是数据库的单行。但是,您当前的代码返回如下内容:

$row[0]='someLoc' // Data from videoLocation
$row[1]='someTitle' // Data from title column
$row[2]='someImageLoc' // Data from videoImageLocation

Assoc Array 的工作方式如下:

$row['videolocation']='someLoc' 
$row['title']='someTitle' 
$row['videoimagelocation]='someImageLoc' 

编辑 2:似乎我在数组 vs assoc 问题上追赶了一些红鲱鱼。我可以检查的第一件事是拼写,但你已经做到了,接下来是检查列名的 case。在 Windows 上,大小写默认不重要,但在 Linux 机器上它

我发现最简单的方法是这样做:

mysql_query("SELECT videolocation, title, videoimagelocation FROM chanels WHERE cname = '$cname' ");

如果一列是错误的,这应该会为您返回一个错误。

【讨论】:

  • 我正在尝试将这些值添加到数组中,我获取数组的原因是因为查询可能返回不止一行
  • @Fluffeh 当您使用不带第二个参数的mysql_fetch_array() 时,它默认为MYSQL_BOTH,因此返回的数组包含both 数字索引和字符串索引。
  • 谢谢你能否请你投票给我的问题,因为我不想得到一个糟糕的代表
【解决方案2】:

不是答案,而是更好地利用数组的建议。使用一个来存储所有数据:

while($row = mysql_fetch_array($query))
{
    $details[$counter2] = array('videoLocation' => $row['videolocation'],
                                'title' =>   $row['title'],
                                'imageLocation' => $row['videoimagelocation']
                                );
    $counter++;
}

这样,第一个索引将存储第一行详细信息,第二个索引将存储第二行详细信息,依此类推。

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 2018-02-09
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2016-01-25
    相关资源
    最近更新 更多