SQL 语法错误'' 近行超出我的文件长度

SQL syntax error '' near line way outside my file length

我有这段代码可以将 3 个输入字段的 id 号和 2 个日期(2 个选择器,1 个文本字段)的数据发送到我的数据库。所有 3 列都是 VARCHAR。我正在使用方法 POST.

的表单

我收到这个错误:

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

我的任何文件中都没有 336 行。

这是我文件中的 PHP 和 SQL 代码。我已经研究了很长时间了,但似乎无法找到此语法错误所在的位置。有什么想法吗?

<?php
//Fetches the id of the konsert selected.
$id = $_GET['id'];

//Create DB object
$db = new Database();

//Create query to fetch personel
$query = "SELECT * FROM funktionar";

//Run above query
$personel = $db->select($query);

//Fetch all from konsert matching the id
$query = "SELECT * FROM konsert WHERE konsertID=".$id;

//Run above query
$konsert = $db->select($query);

if(isset($_POST['submit'])) {
    //Assign variables
    $namn = mysqli_real_escape_string($db->link, $_POST['personalID']);
    $tidStart = mysqli_real_escape_string($db->link, $_POST['tidStart']);
    $tidSlut = mysqli_real_escape_string($db->link, $_POST['tidSlut']);

    //Simple validation
    if($namn == '' || $tidStart == '' || $tidSlut == ''){
        //Set error if any field is left empty
        $error = 'V&auml;nligen fyll i alla f&auml;lt.';
        } else {
        $query = "INSERT INTO sakerhet
            (personalID, tidStart, tidSlut)
            VALUES ('$namn', '$tidStart', '$tidSlut')";

        $insert_row = $db->insert($query);
    }
}
?>

编辑: 已添加插入功能:

public function insert($query) {
       $insert_row = $this->link->query($query) or die($this->link->error.__LINE__);

       //Validate insert
       if($insert_row) {
           header("Location: index.php?msg=".urlencode('Record Added'));
           exit();
       } else {
           die('Error : ('.$this->link->errno .') '.$this->link->error);
       }

   }

最终可行的解决方案。此 SQL 错误发生的原因是:

  • 缺少 table 列。虽然错误太模糊,无法直接给出答案,但我将所有输入数据放入简单变量而不是 á "$selected = $_POST['name']" 并回显变量 á "echo $konsert;" 等,以检查所以数据是从它的表单中正确获取的。像我一样注释掉查询。
  • 可能错误地使用了 mysqli_real_escape_string 或“->link->”?我不参加这个项目的会议,因为它不是必需的,也不会去 public 所以删除它对我来说没问题。

结论 由于上述原因,查询本身执行时出现问题,这并不是一个语法错误。语法正确。

免责声明 此代码不是 100% 安全的,也不是 100% 完成的。输入字段未经过清理,正如@EagleRainbow 向我指出的那样,使用“$id = $_GET['id'];”是不安全的。

代码

<?php
//Fetches the id of the konsert selected.
$id = $_GET['id'];

//Create DB object
$db = new Database();

//Create query to fetch personel
$query = "SELECT * FROM funktionar";

//Run above query
$personel = $db->select($query);

//Select all from table sakerhet
$query = "SELECT * FROM sakerhet";

//Run above query
$safety = $db->select($query);

//Fetch all from konsert matching the id
$query = "SELECT * FROM konsert WHERE konsertID=".$id;

//Run above query
$konsert = $db->select($query);

<?php
    if(isset($_POST['submit'])) {
        //Assign variables
        $selected = $_POST['safetyName'];
        $tidStart = $_POST['tidStart'];
        $tidSlut = $_POST['tidSlut'];
        $konsert = $id;

        //Simple validation
        if($selected == '' || $tidStart == '' || $tidSlut == ''){
            //Set error if any field is left empty
            $error = "V&auml;nligen fyll i alla f&auml;lt.";
            } else {
                $query = "INSERT INTO sakerhet (personalID, tidStart, tidSlut, konsertID) VALUES ('$selected', '$tidStart', '$tidSlut', '$konsert')";
                $insert_row = $db->insert($query);
        }
    }
?>

来自数据库文件的代码

public function insert($query) {
       $insert_row = $this->link->query($query) or die($this->link->error.__LINE__);

       //Validate insert
       if($insert_row) {
           header("Location: index.php?msg=".urlencode('Record Added'));
           exit();
       } else {
           die('Error : ('.$this->link->errno .') '.$this->link->error);
       }

   }

感谢您的帮助。