在php和SQL语法错误中INSERT INTO

时间:2015-09-07 18:44:33

标签: php mysql

我自我学习mySQL和php几天,现在我坚持这个错误,不能帮助自己。你能看一下代码,谢谢!

这是错误

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)

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

当然这很难看,但如果它失败会很惊讶。

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

此外,您需要清理数据。数据直接来自用户,无需清理,或通过适当的代码分离发送,可以,并且有一天会包含sql注入。

像上面那样丑陋的代码开始在mysqli和pdo上展现出一些美感,加上参数安全地分开,所有关于注射的呻吟都消失了。