错误:SQL语法中有错误;在第1行附近')'

时间:2015-05-19 20:25:50

标签: php mysql server

我的PHP代码有问题,它说错误是“错误:你的SQL语法有错误;查看与你的MySQL服务器版本相对应的手册,以便在'''附近使用正确的语法'第1行“

它连接到数据库ok,因为它回显“数据库连接成功”,但它将数据插入数据库。这之前工作得很好,但现在突然停止了工作。有人可以帮忙吗?

<?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 ////////
 ?>

由于

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尝试使用它,问题是单引号`应该是&#39;

 $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上测试查询

答案 2 :(得分:0)

要进行调试,请使用echovardump输出提交给数据库的实际SQL文本,例如

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

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

如果date不是数字,如果它表示DATE数据类型或字符串,则该值必须用单引号括起来。否则,它可能会在数字上下文中被解释。

请注意,此代码似乎容易受到 SQL注入的影响,因为它在SQL文本中包含了可能不安全的值。考虑当值包含&#34;特殊&#34;字符,如单引号或逗号。

潜在的不安全值必须才能正确转义。使用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);

答案 3 :(得分:0)

首先,省略数据库名称是个好主意:

$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