2012-03-20 78 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引發以下分析錯誤:
解析錯誤:語法錯誤,意想不到的 ')',希望 '' 或 ';'在線20上的opt/lampp/htdocs/New/feedback/WebsiteRoot/FormExitPostSuccess.php

我的代碼中的第20行是:$ q1 = mysqli_query($ link,$ query);

編輯:數組_POST中的所有valuse都來自單選按鈕。驗證仍然需要?

+4

你已經有了SQL注入漏洞,使用適當的注入緩解技術修復了你的查詢生成日誌在你開始擔心別的事情之前。 t,在完成構建後回顯查詢。你會發現你的某處存在不平衡的''',導致語法錯誤。這個構造非常醜陋,我不會通過它來弄清楚它在哪裏。 – 2012-03-20 18:40:34

+3

認真考慮使用通過類似PDO(http://php.net/manual/en/book.pdo.php)的準備好的語句 - 否則可能會暴露SQL注入漏洞(因爲此代碼可能會) – 2012-03-20 18:40:50

+0

我不喜歡認爲你甚至沒有正確的腳本FormExitPostSuccess.php不能包含標題(「location:FormExitPostSuccess.php」);你會讓PHP崩潰.....很多事情都是錯誤的... – Baba 2012-03-20 18:49:02

回答

1

所有的評論都是在我看來是正確的,所以不要忽略他們,但這個錯誤似乎是在你的SQL的最後一行:

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

應該

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

(注意在最後加上點號