-1

我正在尝试为 MySQL 表中的每个元素创建一个 HTML 列表,但我返回一个错误,我不知道如何修复它。它说“警告:mysql_fetch_assoc():提供的参数不是第 214 行 /home/rmbennin/htdocs/labs/dataDesign/dbLib.php 中的有效 MySQL 结果资源”

这里的代码调用列表:

 global $connect;
 $output = "";
 $output .= '<form method="post" action="sendData.php">';

 //process a query just to get field names
 $query = "SELECT * FROM $tableName";
 $result = mysql_query($query, $connect) or die(mysql_error());

if($tableName == "meals"){
    $theField = mysql_fetch_field($result);
    $fieldName = $theField->name;
    $Name = fieldToList($tableName, "Name", "foodsID", $fieldName);

    $output .= <<< HERE

    * Name of meal:<br>
    $Name<br>

    * How many servings did you have?:<br>
    <input type="number" name="Servings" required><br>

HERE;

错误来自的代码是这样的:

function fieldToList($tableName, $keyName, $keyVal, $fieldName){

 global $connect;
 $output = "";
 $query = "SELECT $keyName, $fieldName FROM $tableName";
 $result = mysql_query($query, $connect);
 $output .= "<select name= \"$keyName\">\n";
 $recNum = 1;
 while ($row = mysql_fetch_assoc($result)){
   $theIndex = $row["$keyName"];
   $theValue = $row["$fieldName"];
   $output .= <<< HERE
   <option value = "$theIndex"
HERE;

if ($theIndex == $keyVal){
  $output .= " selected = \"selected\"";
} // end if
$output .= ">$theValue</option>\n";
$recNum++;
} // end while
$output .= "</select>\n";
return $output;
} // end fieldToList
4

3 回答 3

0

尝试将单元格名称和表格名称放在反引号内。

例如:

$query = "SELECT * FROM $tableName";

变成

$query = "SELECT * FROM `$tableName`";

并且

$query = "SELECT `$keyName`, `$fieldName` FROM `$tableName`";

其他可能的解决方案:是否global $connect;选择数据库


其他可能的解决方案:尝试var_dump($fieldName)和您在查询中传递的其他变量。它们是否与您在数据库中的内容相对应?


此外,您应该停止使用 mysql_* 函数。它们已被弃用,并且是您系统安全性的潜在漏洞。相反,切换到 PDO 或 Mysqli。本文可能会帮助您决定选择哪一个。

于 2013-06-14T17:00:01.687 回答
0

据我说,您的查询中有一些错误。更改以下部分代码

 while ($row = mysql_fetch_assoc($result)){

 if($result)
 {
   while ($row = mysql_fetch_assoc($result)){

这将检查查询结果参数是 1 还是 0,如果查询将正确执行,则这部分将起作用,否则将不起作用。总之,你不会得到任何错误。

于 2013-06-14T17:06:32.877 回答
0

添加一些调试代码。

echo $query; //to make sure its correct. 


 if (!$connect)
   {
   die('could not connect: ' . mysql_error());
   }

$query = "SELECT $keyName, $fieldName FROM $tableName";
$result = mysql_query($query,$connect)  or die(mysql_error());
print_r(mysql_fetch_assoc($result));
于 2013-06-14T17:20:59.487 回答