-1

我在通过 php 向 MySQL 提交一些数据时遇到问题,我收到以下错误:

“错误:您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在“学生”附近使用的正确语法(UID、名字、姓氏、出生日期、紧急联系人、地址、城市、州)在第 1 行"

我不确定我哪里出错了,任何帮助都会很棒。

<?php
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$dob = $_POST['dob'];
$emergencycontact = $_POST['emergencycontactperson'];
$address = $_POST['addressline1'];
$city = $_POST['city'];
$state = $_POST['state'];
$zip = $_POST['zip'];
$homephone = $_POST['homephone'];
$cellphone = $_POST['cellphone'];
$guardian = $_POST['guardian'];
$inneighborhood = 0;
if ($zip == "49503")
    $inneighborhood = 1;

$con = mysqli_connect("localhost", "cookarts_root", "password", "cookarts_database");

// Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql = "INSERT INTO 'student' (FirstName, LastName, DOB, EmergencyContact, Address,       City, State, ZIP, CellPhone, HomePhone, Guardian, InNeighborhood)
VALUES
($firstname', '$lastname', '$dob', '$emergencycontact', '$address', '$city', '$state', '$zip', '$cellphone', '$homephone', '$guardian', '$inneighborhood')";

if ($con->query($sql) === TRUE) {
      echo 'users entry saved successfully';
}   
else {
  echo 'Error: '. $con->error;
}

mysqli_close($con);
?>

在此处输入图像描述

如果您需要更多信息,我很乐意提供,再次感谢您的帮助。

4

3 回答 3

3

TableNames是标识符,所以它们不应该用单引号引起来。由于您使用的 tableName 不是保留关键字,您可以简单地删除那些环绕的引号,

INSERT INTO student (FirstName, LastName....

当您用单引号包裹某些内容时,它会强制该对象成为字符串文字。因此,当标识符用单引号括起来时,这意味着它们不再是标识符。

服务器抛出异常,因为INSERT INTO需要一个标识符而不是字符串文字。

当您不小心使用了MySQL 保留关键字的表名时,不要使用单引号来分隔标识符,而是使用backticks.

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-03-23T16:14:08.570 回答
2

将您的查询更改为

$sql = "INSERT INTO student (FirstName, LastName, DOB, EmergencyContact, Address,                City, State, ZIP, CellPhone, HomePhone, Guardian, InNeighborhood)
    VALUES
   ('$firstname', '$lastname', '$dob', '$emergencycontact', '$address', '$city', '$state', '$zip', '$cellphone', '$homephone', '$guardian', '$inneighborhood')";

不要在表名周围使用引号

于 2013-03-23T16:16:42.173 回答
1

看起来你也错过了一些东西:

你有:
($firstname',

应该是:(缺少'开头)
('$firstname',

但即便如此,您可能想要使用 " (引号)并像这样转义它们:

(\"$名\",

您的 INSERT INTO 行上的地址和城市之间也有很多空间...地址,城市

是的,您应该使用 ` 转义 mysql 字段名称

于 2013-03-23T16:18:40.873 回答