MySQL / PHP - 仅显示第一行两次

时间:2017-02-21 19:25:59

标签: php mysql

我正在尝试让我的PHP在下拉菜单中显示所有产品名称。但是它只显示第一行两次。

$prodNameSQL="select prodName from product";

//execute SQL query or return an error
$exeProdNameSQL=mysql_query($prodNameSQL) or die(mysql_error());

//create array of records & populate it with result of the execution of the SQL query
$array=mysql_fetch_array($exeProdNameSQL);

echo "<select name='productCombo'>";
foreach($array as $value) {

echo "<option value=".$value.">".$value;
echo "</option>";

}
echo "</select>";

我知道我应该使用mysqli并且mysql被折旧但是它超出了我的控制范围。

感谢。

3 个答案:

答案 0 :(得分:1)

当您调用mysql_fetch_array时,mysql驱动程序会从结果集中返回一行。通过对该结果(foreach)执行$array,您实际上会循环遍历单行中的列。

你需要执行:

while ($array = mysql_fetch_array($exeProdNameSQL)) {
    // output your dropdown options here
}

这将允许您迭代查询返回的每个结果。

此外,mysql扩展程序很久以前已被弃用(php5.5),并且php5.6已达到使用寿命,并且基本上也已弃用。 mysql扩展名不可用php7.0 +,因此如果您尝试在最新的系统上运行此代码,它将失败。

您应强烈考虑升级到MySQL PDO驱动程序(http://php.net/manual/en/ref.pdo-mysql.php)。

答案 1 :(得分:0)

尝试使用结果集,而不是使用fetch_assoc(),然后使用像这样的while循环

while($row = mysql_fetch_assoc($result)){
    echo "<option value=".$row['prodName '].">".$row['prodName ']."</option";

}

http://php.net/manual/en/function.mysql-fetch-assoc.php

答案 2 :(得分:0)

首先检查$ array是否包含结果

<?php 

if ($array) {

while ($row = mysqli_fetch_array($array, MYSQLI_ASSOC)) {
    echo "<option value=".$row['name'].">".$row['value']."</option>";
}

} else {
  echo "<p>". mysqli_error($connection) ."</p>";
}