2016-05-08 2 views
-3

私はクラスのための簡単なウェブサイトを作っています。私は自分のデータベースに情報を保存しようとしています。エラーはあまり具体的ではなく、コードのどの部分を修正する必要があるのか​​分かりません。このMySQLエラーのトラブルシューティングを行うにはどうすればよいですか?

エラーメッセージ:

チェックラインで 近く使用する権利構文 ')' のためにあなたのMariaDBサーバーのバージョンに対応するマニュアル2

私のPHPコード:

<?php 
include 'mysqli.php' ; 

$result = $con->query("select * from setList s 
left join songTable t on s.SetList_ID = t.Song_ID 
left join bands b on s.SetList_ID = b.Band_ID"); 

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
$setList = $_POST['setlist']; 
$venue = $_POST['venue']; 
$date = $_POST['dateOfShow']; 
$band= $_POST['band']; 

$set = $result->fetch_object(); 

//error handling and form 
try { 
    if (empty($setList) || empty($venue) || empty($date) ||   empty($band)) { 
     throw new Exception(
      "All Fields Required"); 
    } 

    if (isset($set)) { 
     $id = $set->SetList_ID; 

    $q = "update setList set SetList_Name = '$setList', 
      Venue = '$venue', Show_Date = $date, Band_Name = '$band')"; 
     } 
    else{ 

    $q = "insert setList (SetList_Name, Venue, Show_Date, Band_Name) 
     values ('$setList', '$venue', $date, '$band')"; 
    } 

    $result = $con->query($q); 
    if (!$result) { 
     throw new Exception($con->error); 
    } 

    header('Location:my_set-lists.php'); 
} catch(Exception $e) { 
    echo '<p class ="error">Error: ' . 
    $e->getMessage() . '</p>'; 
    } 
} 
?> 
+0

エラーはかなりわかりやすいです:あなたのSQLアップデートステートメントに一致しない括弧があります: '' setList_Name = '$ setList'、Venue = '$ venue'、Show_Date = $ date、Band_Name = $ band ') "' '' – zyamys

+2

**警告**:mysqliを使用する場合は、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使用する必要があります。 ['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用して、クエリにユーザーデータを追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'や' $ _GET'データを直接クエリに入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。 – tadman

+0

ありがとうございました。私が言ったように、私はこれに対して非常に新しく、これはクラスプロジェクトのためのものです。私は将来の使用のためにこれを念頭に置いておきます。 – ferrari3000

答えて

1

エラーメッセージは、問題がどこにあるかを正確に示しています。余分に)があります。あなたの次のクエリ(insert setListを開始)も失敗するつもりです;:注

$q = "update setList set SetList_Name = '$setList', 
     Venue = '$venue', Show_Date = $date, Band_Name = '$band'"; 

$q = "update setList set SetList_Name = '$setList', 
     Venue = '$venue', Show_Date = $date, Band_Name = '$band')"; 
// extra) is here ---------------------------------------------^ 

を交換してくださいINSERT INTO setList...である必要があります。まともなIDE(PHPStormのような)はあなたのためにこれらのエラーをキャッチします。

また、あなたはSQL injectionに広く公開されています。準備されたステートメントを使用する必要があります。

+0

ありがとうございました。私が言ったように、私は経験がほとんどありません。 Band_Nameが不明な列であることを伝える新しいエラーが表示されています。その上の任意のアイデア? – ferrari3000

+0

@ ferrari3000つまり、その名前の列はありません。見た目からは、おそらく 'Band_ID'列しかありません。あなたが助けてくれたら、この回答を受け入れてから、新しいか別のエラーに遭遇したら新しい質問をしてください。 –

関連する問題