構文エラーが原因でデータベースにデータを送信できません。SQLで構文エラーが発生しました
データベース構造
database: red_fungi
username: fungi_47
password: *******
テーブル構造:
列>タイプ
id > int(11)
first_name > text
last_name > text
email > text
phone > text
website > text
description > text
と同様にPHPコード:
<?php
$servername = "localhost";
$username = "fungi_47";
$password = "********";
$dbname = "red_fungi";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Escape user inputs for security
$first_name = mysqli_real_escape_string($link, $_POST['first_name']);
$last_name = mysqli_real_escape_string($link, $_POST['last_name']);
$email = mysqli_real_escape_string($link, $_POST['email']);
$phone = mysqli_real_escape_string($link, $_POST['phone']);
$website = mysqli_real_escape_string($link, $_POST['website']);
$comment = mysqli_real_escape_string($link, $_POST['comment']);
$hosting = mysqli_real_escape_string($link, $_POST['hosting']);
$sql = "INSERT INTO contact (id, first_name, last_name, email, phone, website, description, hosting)
VALUES (NULL, $first_name, $last_name, $email, $phone, $website, $comment, $hosting)";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
提出する際、私はポストが成功したことを参照してください。
first_name=Bill&last_name=Nye&email=bill%40nye.com&phone=8888888888&website=billnyefungi.com&comment=help%20me%20make%20a%20fungi%20website&hosting=yes
が、ポストの応答は次のエラーを示しています
Error: INSERT INTO contact (id, first_name, last_name, email, phone, website, description, hosting) VALUES (NULL, , , , , , ,)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' , , , , ,)' at line 2
私は、構文をチェックしたし、何を見ることができないしかし、間違っている何が間違っているのでしょうか?
[Little Bobby](http://bobby-tables.com/)によると*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how- php)*** MySQLi(http://php.net)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)のステートメントについて学びます。 /manual/ja/mysqli.quickstart.prepared-statements.php)。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! [それを信じていないのですか?](0120-385-305) –
"、、、、"は有効なMySQL構文ではありません。少なくとも –
の場合は、クエリ内の変数の前後に引用符を追加する必要があります。あなたのクエリをエコーして、それが有効でないことがわかります。 –