错误:你有一个错误在你的SQL语法;& # 39;附近)& # 39;在第一行


Error: You have an error in your SQL syntax; near ')' at line 1

我有一个问题与我的PHP代码,它说错误是"错误:你有一个错误在你的SQL语法;查看与MySQL服务器版本对应的手册,以了解在第1行

附近使用')'的正确语法。

它连接到数据库,因为它返回"数据库连接成功",但它没有将数据插入到数据库中。这之前工作得很好,但现在突然停止工作。有人能帮忙吗?

<?php   
$username = "student";
$password = "student";
$hostname = "localhost"; 
$db       = "details";
$link = new mysqli($hostname, $username, $password, $db);
 if ($link->connect_errno)
    printf("Connect failed: %s'n", $link->connect_error);
 else 
    echo "Database Connection Successful 'n";
 echo nl2br("'n");
 $Urgency = "Urgency";
if(isset($_POST['submit'])){
  $TypeOfProblem = $_POST['problemtype'];
  $ProblemDescription = $_POST['problem'];
  $RoomNo = $_POST['roomno'];
  $Problem = $_POST['reporter'];
  $Urgency = $_POST['Urgency'];
  $Date = $_POST['date'];
 //Insert into Database
  $sql = "INSERT INTO `details`.`problem` (`Type Of Problem`, `Problem Description`, `RoomNo`, `Urgency`, `UserIDProblem`,`Date` ) VALUES ('$TypeOfProblem', '$ProblemDescription', '$RoomNo', '$Urgency', '$Problem', $Date)";
if (!mysqli_query($link, $sql))
       {
       die('Error: ' . mysqli_error($link));
       }
     echo "'n Thank you. Your Helpdesk Call has been submitted.";
    mysqli_close($link);
}//////// end isset submit if ////////
 ?>

谢谢

尝试使用这个,问题是单引号'应该是'

 $sql = "INSERT INTO 'details'.'problem' ('Type Of Problem', 'Problem Description', 'RoomNo', 'Urgency', 'UserIDProblem','Date' ) VALUES ('$TypeOfProblem', '$ProblemDescription', '$RoomNo', '$Urgency', '$Problem', '$Date')"

或者尝试设置一个echo $sql并直接在de dbms上测试查询

日期'$Problem', $Date)";需要单引号'$Problem', '$Date')";

首先,最好省略数据库名称:

$sql = "INSERT INTO `problem` (`Type Of Problem`, `Problem Description`, `RoomNo`, `Urgency`, `UserIDProblem`, `Date`) VALUES ('$TypeOfProblem', '$ProblemDescription', '$RoomNo', '$Urgency', '$Problem', $Date)";

你确定你的列名中有空格吗?我的意思是这是可行的,但我认为这不是个好主意。

我在你的查询中找不到另一个问题,也许你应该引用日期:

$sql = "INSERT INTO `problem` (`Type Of Problem`, `Problem Description`, `RoomNo`, `Urgency`, `UserIDProblem`, `Date`) VALUES ('$TypeOfProblem', '$ProblemDescription', '$RoomNo', '$Urgency', '$Problem', '$Date')";

否则,请提供完整的查询:

die("INSERT INTO `problem` (`Type Of Problem`, `Problem Description`, `RoomNo`, `Urgency`, `UserIDProblem`, `Date`) VALUES ('$TypeOfProblem', '$ProblemDescription', '$RoomNo', '$Urgency', '$Problem', $Date)");

你应该注意到,你的代码是可利用的sql注入!使用mysqli_real_escape_string

为了调试这个,输出正在提交给数据库的实际SQL文本,使用echovardump,例如

$sql = "INSERT INTO ...";
echo "SQL=" . $sql ; 

这将向您显示将要提交到数据库的实际语句,您通常可以从那里调试问题。

如果date不是数字,如果它代表DATE数据类型或字符串,则需要将值括在单引号中。否则,它可能会在数字上下文中被解释。


请注意,这段代码似乎很容易受到SQL注入的攻击,因为它在SQL文本中包含了潜在的不安全值。考虑一下当一个值包含"特殊"字符(如单引号或逗号)时会发生什么。

可能不安全的值必须正确转义。在mysqli中,您可以使用mysqli_real_escape_string函数。

更好的模式是使用准备好的语句绑定占位符

作为一个示例(在它与检查mysqli_函数调用返回的错误的代码混淆之前)

$sql = "INSERT INTO `details`.`problem`
       (`Type Of Problem`,`Problem Description`,`RoomNo`,`Urgency`,`UserIDProblem`,`Date`)
       VALUES (?,?,?,?,?,?)";
$sth = mysqli_prepare($link,$sql);
if (!$sth) {
   echo "error:" . mysqli_error($link);
)
mysqli_stmt_bind_param($sth,"ssssss"
    ,$TypeOfProblem,$ProblemDescription,$RoomNo,$Urgency,$Problem,$Date); 
mysqli_stmt_execute($sth);