我有一个问题与我的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文本,使用echo
或vardump
,例如
$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);