MySql查询中的错误是什么?

时间:2012-09-30 15:43:08

标签: php mysql sql database

每当我访问该页面时,我得到:您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法

它与第二个while循环

有关
<html>
<body>
<?php
mysql_connect("mysql.1freehosting.com", "u533288591_sdc", "mypass") or die(mysql_error());
mysql_select_db("u533288591_sdc");
$name = $_POST['name'];
$probably_needed = "questions";
$grade = $_POST['class'] ;
$answers ="answers" ;
$query = mysql_query("SELECT * FROM $probably_needed ") or die(mysql_error()); 
$otherquery = mysql_query("select * from $ANSWERS ") or die (mysql_error()) ;

while($row = mysql_fetch_array($query)){
echo "<a href=\"answer.php?name=" . $name .  "&subject=" . $row['Subject'] .  "&grade=" . $grade . "\">" . $row['Subject'] ."</a>" ;
    while($answerrow = mysql_fetch_array($otherquery)){
        if ($answerrow['name'] == $name){
            if ($answerrow['subject'] == $row['Subject']){
                echo "success" ;
                }
          }
      }

}
?>

</body>
</html>

4 个答案:

答案 0 :(得分:2)

一个。在php中$answers不是$ANSWERS

Form PHP Doc

  

PHP中的变量由美元符号后跟变量名称表示。变量名称区分大小写。

尝试

$answers ="answers" ;
mysqli_query($link,sprintf("Select * from %s",$answers));


B.来自{Doc(1)}上的PHP文档

  

建议的替代方案   不鼓励使用此扩展名。相反,应该使用MySQLi或PDO_MySQL扩展。另请参阅MySQL:选择API指南和相关的常见问题解答以获取更多信息。该功能的替代方案包括:

您应该升级到mysql_querymysqli


C.由于您的代码中存在XSS注入漏洞,您应该使用PDO

我认为您的代码应该是什么样的

filter_var

答案 1 :(得分:1)

PHP中的变量名称为case sensitive

您定义:$answers ="answers";

但请使用"select * from $ANSWERS "

$ answers不是$ ANSWERS

答案 2 :(得分:0)

用反引号包装你的变量。 lowercase您的变量$ANSWERS

SELECT * FROM `$probably_needed` 
select * from `$answers`

PHP区分大小写。

答案 3 :(得分:0)

可能是我弄错了,但你应该这样做:

$queryText1 = "SELECT * FROM " + $probably_needed;
$queryText1 = "SELECT * FROM " + $ANSWERS;
$query = mysql_query($queryText1) or die(mysql_error()); 
$otherquery = mysql_query($queryText1) or die (mysql_error()) ;

换句话说,你应该连接字符串和变量。