2016-11-21 12 views
0

構文エラーが原因でデータベースにデータを送信できません。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

私は、構文をチェックしたし、何を見ることができないしかし、間違っている何が間違っているのでしょうか?

+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) –

+1

"、、、、"は有効なMySQL構文ではありません。少なくとも –

+0

の場合は、クエリ内の変数の前後に引用符を追加する必要があります。あなたのクエリをエコーし​​て、それが有効でないことがわかります。 –

答えて

1

あなたのコードでは、$ _POST ['XXX']に値が設定されていると想定されています。それはすべてエラーの意味です。

代わりに、$ _POST ['XXX']が作成されているかどうかを確認してから、使用する前に値を確認してください。

if ((isset($_POST['first_name'])) && (!empty($_POST['first_name']))) { 
    //do query and rest of your script 

} else { die('Need form input');} 
+0

それでは、コンテンツを渡すことさえできませんでした。 FIRST_NAME =ビル&LAST_NAME =ナイ&Eメール=法案%40nye.com&携帯電話= 8888888888&ウェブサイト= billnyefungi.com&コメント=ヘルプ%20me%20make%20A%20fungi%20website&ホスティング= yesの 私はI'LLを考える :私は、中にフォームのクエリを通過しませんでしたそのデータを取得し、それを解析してデータベースに保存するための変数をPHPで作成する必要があります。 – strasbal

+0

あなたは(あなたの質問に追加されていますか?)はあなたのフォームがPOSTではなくGETメソッドを使用することを示唆しています。あなたのフォームがGETを使用する場合(すべての値がURLにあることを意味する)、$ _POST ['X']を$ _GET ['X']に変更する必要があります。両方を$ _REQUEST ['X']に変更することで対応できます。 –

+0

getを使用しているはずですが、私は再度チェックしなければなりません。それを指摘してくれてありがとう。 – strasbal

2

SQL文は、より多くの本のように見える必要があります:

$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}')"; 

私はこのような問題を抱えているとき、私はまず最初にSQLをエコーし​​、明らかな問題

があるかどうかを確認されます

他のユーザーが作成したすべてのデータ確認&セキュリティポイントにフォローアップを行います。

関連する問題