MySQL中的“未知列”问题

时间:2015-02-12 22:19:40

标签: php mysql

我使用以下代码将一行数据添加到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;
}

4 个答案:

答案 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')";