我使用以下代码将一行数据添加到MySQL数据库中。我虽然得到了一个奇怪的错误。该错误表明我试图将数据添加到一个不存在的列中,称为“#Nat;"”,但这是$fName
的值。 VALUES
不在我将所需数据插入表中的位置吗?继承了我的相关代码,谢谢!
// Create connection
$conn = new mysqli($servername, $username, $password, $username);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
//Column names are FIRSTNAME, LASTNAME, TEACHERNAM, MSIPROOM
$sql = "INSERT INTO PerA (FIRSTNAME, LASTNAME, TEACHERNAME, MSIPROOM) VALUES ($fName, $lName, $tName, $mRoom)";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
答案 0 :(得分:2)
字符串文字需要用引号括起来; SQL标准是使用单引号。 (默认情况下,MySQL也接受双引号,但为了获得最大的可移植性,我建议使用单引号。)
INSERT INTO mytable (mycolumn) VALUES ('myvalue')
^ ^
MySQL返回的错误表示它认为您提供的是标识符(列名)而不是文字值。
请注意,将值放入SQL文本会使您的代码容易受到SQL注入攻击。如果要这样做,则需要适当地转义值。 (我认为你想要使用的功能是mysqli_real_escape_string
。)
但不要这样做。
对于新开发,我强烈建议您考虑将预备语句与绑定占位符一起使用。那么你就不需要“逃避”这些价值......
e.g。
$sth = $dbh->prepare("INSERT INTO mytable (mycolumn) VALUES ( :fname )";
$sth->bindParam(':fname',$fname);
$sth->execute();
答案 1 :(得分:1)
您必须引用您的值,例如:
$sql = "INSERT INTO PerA
(FIRSTNAME, LASTNAME, TEACHERNAME, MSIPROOM)
VALUES ('$fName', '$lName', '$tName', '$mRoom')";
或者,如果值包含引号本身:
$sql = sprintf(
"INSERT INTO PerA (FIRSTNAME, LASTNAME, TEACHERNAME, MSIPROOM)
VALUES (%s, %s, %s, %s)",
mysql_real_escape_string($fName),
mysql_real_escape_string($lName),
mysql_real_escape_string($tName),
mysql_real_escape_string($mRoom)
);
答案 2 :(得分:0)
由于字符串值中的内容可能会出错。
$sql = "INSERT INTO PerA (FIRSTNAME, LASTNAME, TEACHERNAME, MSIPROOM) VALUES ('".$fName."', '".$lName."', '".$tName."', '".$mRoom."')";
即使你提供数据,你也应该养成在插入数据库时逃避的习惯,但这是一个不同的问题。
答案 3 :(得分:0)
尝试将值放在引号
中$sql = "INSERT INTO PerA (FIRSTNAME, LASTNAME, TEACHERNAME, MSIPROOM) VALUES ('$fName', '$lName', $tName, '$mRoom')";