mysql_query()的问题;说预期的资源

时间:2010-06-11 15:06:52

标签: php mysql

我有这个php文件。标记为粗体的行显示错误:“mysql_query()将参数2作为资源使用。嗯,在我评论过的行上的类似语法'没有错误??'工作得很好。     

 function checkAnswer($answerEntered,$quesId)
 {
  //This functions checks whether answer to question having ques_id = $quesId is satisfied by $answerEntered or not

  $sql2="SELECT keywords FROM quiz1 WHERE ques_id=$quesId";
  **$result2=mysql_query($sql2,$conn);**
  $keywords=explode(mysql_result($result2,0));

  $matches=false;
  foreach($keywords as $currentKeyword)
  {
   if(strcasecmp($currentKeyword,$answerEntered)==0)
   {
    $matches=true;
   }
  }

  return $matches;

 }

 $sql="SELECT answers FROM user_info WHERE user_id = $_SESSION[user_id]";
 $result=mysql_query($sql,$conn);         // No error??
 $answerText=mysql_result($result,0);

 //Retrieve answers entered by the user
 $answerText=str_replace('<','',$answerText);
 $answerText=str_replace('>',',',$answerText);
 $answerText=substr($answerText,0,(strlen($answerText)-1));
 $answers=explode(",",$answerText);

 //Get the questions that have been assigned to the user.
 $sql1="SELECT questions FROM user_info WHERE user_id = $_SESSION[user_id]";
 **$result1=mysql_query($sql1,$conn);**
 $quesIdList=mysql_result($result1,0);
 $quesIdList=substr($quesIdList,0,(strlen($quesIdList)-1));
 $quesIdArray=explode(",",$quesIdList);



 $reportCard="";
 $i=0;
 foreach($quesIdArray as $currentQuesId)
 {
  $answerEnteredByUser=$answers[$i];

  if(checkAnswer($answerEnteredByUser,$currentQuesId))
  {
   $reportCard=$reportCard+"1";
  }
  else
  {
   $reportCard=$reportCard+"0";
  }
  $i++;
 }

 echo $reportCard;
?>

这是connect.php文件。它适用于其他PHP文档。

<?php
 $conn= mysql_connect("localhost","root","password");
 mysql_select_db("quiz",$conn);
?>

3 个答案:

答案 0 :(得分:5)

$result2=mysql_query($sql2,$conn);

$ conn未在函数范围内定义(即使您之前包含connect.php文件。

虽然您可以使用该建议来制作$ conn 全球,但通常更好的做法是不要为了全球化而制作全局内容。

我会将$ conn作为参数传递给函数。这样,您可以重复使用不同连接编写的相同功能。

答案 1 :(得分:2)

$ conn未声明为全局,因此函数无法访问它,因为它未在其中定义。

只需添加

即可
global $conn;

到函数的顶部以允许它访问$ conn。

或者您可以从mysql_query()语句中删除$ conn。默认情况下,它将使用当前连接(如下面的注释中所述)。

答案 2 :(得分:1)

你在哪里设置$ conn?它看起来不像你在该函数中设置连接