2012-03-20 3 views
0

これは私のコードです。私はこれが簡単になるはずですが、どういうわけか、SQLは解析エラーを返します。助けてください。PHPを使用したSQLトランザクションの失敗

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD,DB_DATABASE); 
if(mysqli_connect_errno()) { 
    die('SQL ERROR : ' . mysqli_connect_error()); 
} 
mysqli_autocommit($link, FALSE); 

    $query = "INSERT INTO feedbackExit (1a, 2a, 3a, 4a, 5a, 1b, 2b, 3b, 4b, 5b, 6b, 1c, 2c, 3c, 4c, 5c, 6c, 1d, 2d, 3d, 4d, 5d, 6d, 1e, 2e) 
       VALUES (".$_POST['1a'].",".$_POST['2a'].",".$_POST['3a'].",".$_POST['4a'].",".$_POST['5a'].", 
         ".$_POST['1b'].",".$_POST['2b'].",".$_POST['3b'].",".$_POST['4b'].",".$_POST['5b'].",".$_POST['6b'].", 
         ".$_POST['1c'].",".$_POST['2c'].",".$_POST['3c'].",".$_POST['4c'].",".$_POST['5c'].",".$_POST['6c'].", 
         ".$_POST['1d'].",".$_POST['2d'].",".$_POST['3d'].",".$_POST['4d'].",".$_POST['5d'].",".$_POST['6d'].", 
         ".$_POST['1e'].",".$_POST['2e']")"; 
    $q1 = mysqli_query($link,$query); 
    $query = "UPDATE ".$_SESSION['SESS_AUTH']." SET `refExitHash` = '".md5($_SESSION['SESS_USERNAME'], $raw_output = null)."'"." WHERE `index`='".$_SESSION['SESS_USERNAME']."'"; 
    $q2 = mysqli_query($link,$query); 
    if (!($q1 and $q2)) 
    { 
    die('Error: ' . mysqli_errno($link)); 
    mysqli_rollback($link); 
    } 
    else 
    { 
header("location: FormExitPostSuccess.php"); 
mysqli_commit($link); 
    } 
    mysqli_close($link); 

SQLは、次のパースエラーをスロー:
解析エラー:構文エラー、予期しない ')'、期待 '' または ';' opt/lampp/htdocs/New/feedback/WebsiteRoot/FormExitPostSuccess.php on line 20

私のコードの20行目は次のとおりです:$ q1 = mysqli_query($ link、$ query);

編集:配列_POST内のすべてのvaluseはラジオボタンからのものです。検証はまだ必要ですか?

+4

SQLインジェクションホールが豊富です。他に何か心配する前に、適切なインジェクション軽減技術を使ってクエリ生成ログを修正してください。あなたがそれを構築し終えたら、クエリをエコーアウトします。不均衡な ''があり、構文エラーを引き起こしていることがわかります。その構造は、私がそれがどこにあるかを理解するためにそれを読まないほど醜いほど醜いです。 –

+3

PDO(http://php.net/manual/en/book.pdo.php)のようなものを介して準備された文を使用することを真剣に考えてください - そうでなければ(おそらくこのコードのように)SQLインジェクションの脆弱性を公開する可能性があります –

+0

FormExitPostSuccess.phpにはヘッダー( "location:FormExitPostSuccess.php")を含めることはできません。あなたはPHPクラッシュを起こすでしょう.....多くのことがここで間違っています... – Baba

答えて

1

すべてのコメントは、私の意見で正しいですので、それらを無視しませんが、エラーはSQLの最後の行にあるように思われる:

".$_POST['1e'].",".$_POST['2e']")"; 

があるべき

".$_POST['1e'].",".$_POST['2e'] . ")"; 

(最後にドットを追加することに注意してください。

関連する問題