-1

PHPを介してMySQLにデータを送信するのに問題があります。次のエラーが発生します。

「エラー:SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、「学生」(UID、FirstName、LastName、DOB、EmergencyContact、Address、City、State」の近くで使用する正しい構文を確認してください。 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'、

ただし、それでも、「」(引用符)を使用して、次のようにエスケープすることをお勧めします。

(\ "$ firstname \"、

また、INSERT INTO行の住所と都市の間に多くのスペースがあります...住所、都市

そして、はい、あなたはあなたのmysqlフィールド名を`でエスケープするべきです

于 2013-03-23T16:18:40.873 に答える