2015-09-07 63 views
0

我自学mySQL和PHP几天,现在我坚持这个错误,不能帮助自己。你能看看代码,谢谢!INSERT INTO在PHP和SQL语法错误

这是错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 7 

这里是页

switch($_GET['action']) { 
case 'add': 
    switch($_GET['type']) { 
    case 'movie': 
    $query = 'INSERT INTO 
      movie 
        (movie_name, movie_year, movie_type) 
      VALUES 
        ("' . $_POST['movie_name'] . '", 
        ' . $_POST['movie_year'] . ', 
        ' . $_POST['movie_type'] . ')'; 

      break; 
    } 
    break; 
} 
    if (isset($query)) { 
    $result = mysql_query($query, $db) or die(mysql_error($db)); 
    } 

我认为问题可能出在这里

<td><select name='movie_type'> 
     <?php 

     $query = 'SELECT movietype_label FROM movietype ORDER BY movietype_id'; 
     $result = mysql_query($query, $db) or die (mysql_error($db)); 


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

      } 
     } 

     ?> 
     </select></td> 

,这里是print_r的上

Array(
[movie_name] => asd 
[movie_type] => 
[movie_year] => 2015 
[submit] => ADD) 
+1

您应该学习如何使用预准备语句并使用mysql_ API以外的内容,因为它已被弃用。 –

回答

2

您不应该使用双引号"而不是单引号',如下所示。你在混合单引号和双引号。

$query = "INSERT INTO 
      movie 
        (movie_name, movie_year, movie_type) 
      VALUES 
        ('" . $_POST['movie_name'] . "', 
        '" . $_POST['movie_year'] . "', 
        '" . $_POST['movie_type'] . "')"; 
+0

我试过尝试“但它只会导致'解析错误:语法错误,意外''。$ _POST [''(T_CONSTANT_ENCAPSED_STRING)在C:\ xampp \ htdocs \ phphph \ comit.php 26行' – ABCD

+0

@Lukas ,你没有正确引用它,如果有帮助,请在回答中检查编辑 – Rahul

+0

是的,谢谢@Rahul,现在我明白了我做错了什么,并且它的工作正常。 – ABCD

1

诚然,这是丑陋的,但如果失败,会感到很惊讶。

$query = "INSERT INTO 
movie (movie_name, movie_year, movie_type) 
VALUES 
('" 
. $_POST['movie_name'] . "','" 
. $_POST['movie_year'] . "','" 
. $_POST['movie_type'] . "')"; 

此外,您需要清理您的数据。数据直接从用户采取行动而无需清理,或通过适当分离代码发送,可以并且将来某天将包含sql注入。

像上面这样丑陋的代码开始采用mysqli和pdo来实现一些美感,再加上参数是安全分开的,所有关于注入的呻吟都消失了。

+0

是的,谢谢@Drew,现在我明白了什么是我做错了 – ABCD