0

在 SQL 中使用时,我有一个内部连接,但是当我尝试将它集成到我的 PHP 中的一个函数中时,它给了我一个语法错误“意外'”(T_ENCAPSED_AND_WHITESPACE),需要标识符(T_STRING)或变量(T_VARIABLE)或号码(T_NUM_STRING)”。代码如下:

echo "<table border=='1'>
<tr>
<th>Name</th>   
<th>Exam Date</th>
<th>Level</th>
<th>Mark</th>
    <th>Style</th>

</tr>";

while($row = mysql_fetch_array($exam_recordation))
  {
  echo "<tr>";
$name_query = mysql_query("SELECT DISTINCT student.name
              FROM student
              INNER JOIN exam ON student.email = exam.Student_email
              WHERE student.email <> $row['Student_email']");
  while($row = mysql_fetch_array($name_query))
  {
    echo "<td>" . $row['name'] . "</td>";
  }
  echo "<td>" . $row['examDate'] . "</td>";
  echo "<td>" . $row['level'] . "</td>";
  echo "<td>" . $row['mark'] . "</td>";
      echo "<td>" . $row['style'] . "</td>";

  echo "</tr>";
  }
echo "</table>";

我有内部连接的原因是因为它需要来自 $exam_recordation 之外的 Student_email 用于它通过的每条记录。$exam 记录保存考试表中满足设定条件的所有记录。我从自己的研究中看到,嵌套查询并不是最好的做法,我不认为我在嵌套查询,但我正在嵌套 while 循环,这在我看来是可疑的危险/不好的做法。这是我知道如何执行这种功能/操作的唯一方法。

我需要的帮助是弄清楚如何将内部连接加入该功能。对于第一个 while 循环所经过的每条记录的每封电子邮件,内部连接将名称从学生表中取出并回显。

4

2 回答 2

0

在开始之前,请注意 mysql_ 已正式弃用。您应该继续使用 mysqli 或 pdo。

您可能会在您最初打算之前关闭您的 while 循环......请参阅下面的评论

 while($row = mysql_fetch_array($name_query))
 {
   echo "<td>" . $row['name'] . "</td>";
 } << REMOVE THIS 
 echo "<td>" . $row['examDate'] . "</td>"; << PHP NO LONGER KNOWS ABOUT $row
 echo "<td>" . $row['level'] . "</td>";
 echo "<td>" . $row['mark'] . "</td>";
    echo "<td>" . $row['style'] . "</td>";

 echo "</tr>";
 }

您可能还想确保 PHP 能够替换您的查询变量。MySQL 还需要查看围绕文本字符串的引号以进行比较。尝试将连接查询更改为...

$name_query = mysql_query("SELECT DISTINCT student.name
          FROM student
          INNER JOIN exam ON student.email = exam.Student_email
          WHERE student.email <> '{$row['Student_email']}'");
于 2013-05-01T19:36:32.443 回答
0

基本 PHP 语法:双引号字符串中的数组键本身不能被引用。例如

$arr = "This is an $array['reference']."
                          ^--       ^-- incorrect

它应该是:

$arr = "This is an {$array['reference']}."; // note the {} notation
or
$arr = "This is an $array[reference]."; // Note lack of quotes. 
于 2013-05-01T19:42:06.980 回答