我的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 ////////
?>
由于
答案 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)
要进行调试,请使用echo
或vardump
输出提交给数据库的实际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
。