2011-03-22 72 views
0

我遇到了$ updatequery SQL的問題,這個php腳本在ajax調用中接受3個post變量,第一個是前面正確答案的數組,這裏不相關。根據前一個問題是否被正確回答,$ win是0或1,$ id是單詞的主要ID(這是一個單詞匹配遊戲,就像韓國的flashcards一樣)。 $ updatequery旨在爲每個單詞建立統計數據,有多少人能夠正確判斷並確定該單詞有多難,只需記錄點擊次數以及多少次正確回答。如果我回答錯誤的話,它會在數據庫中準確地反映出來:1點擊,沒有勝利。然而,我是否正確地回答說,它表示0次點擊,沒有數據庫中的勝利......出了什麼問題?!?!?!MySQL語法?應該很簡單!

<?php 

$dbcon = mysql_connect("localhost", "tulesblo_tules", "Gromit554?") or die(mysql_error()); 
mysql_select_db("tulesblo_koreangame", $dbcon) or die(mysql_error()); 
mysql_query("SET NAMES utf8"); 

$correctarray = explode(",", $_POST["correct"]); 
$win = (int)$_POST["win"]; 
$id = (int)$_POST["id"]; 
$correct = ""; 
$y = 1; 

if ($id > 0) { 
    $updatequery = "UPDATE words SET clicks=clicks+1 AND wins=wins+ '$win' WHERE id= '$id'"; 
    mysql_query($updatequery) or die(mysql_error()); 
    } 

foreach($correctarray as $x){ 
    $correct .= " id != " . $x; 
    if ($y == count($correctarray)) {break;} 
    $correct .= " AND"; $y++; 
    } 

//pick 4 random pairs 
$filter = count($correctarray) > 1?"WHERE" . $correct:""; 
$querystring = "SELECT * FROM words ".$filter." ORDER BY RAND() LIMIT 4"; 

$query = mysql_query($querystring); 

//turn them into multiarray 
$x = 0; 
$multiarray = array(); 
while ($result = mysql_fetch_assoc($query)){ 
    $multiarray[$x] = array(
     "id"  => $result['id'], 
     "korean" => $result['korean'], 
     "english" => $result['english'] 
     ); 
    $x++; 
} 
array_push ($multiarray,$win,$id); 
//send as JSON to client 
//array_push($multiarray, $querystring, count($correctarray)); 
echo json_encode($multiarray); 

?> 
+1

我可以推薦的是逐步調試 - 將您的查詢記錄到文件,您會發現錯誤。 – Yaronius 2011-03-22 16:34:34

+1

我建議你也閱讀一下關於SQL注入的問題,並看看如何使用mysqli,這樣你就可以使用準備好的語句並綁定變量。 – 2011-03-22 16:52:07

+0

感謝Yaronius,我沒有從mysql_error()得到任何有用的東西,我知道變量正確地到達那裏,因爲我已經用php輸出它們,我怎樣才能更密切地監視MySQL正在做什麼?如何將查詢記錄到文件? – 2011-03-22 17:05:46

回答

2

更新多列時沒有AND。只需用逗號分隔它們 -

$updatequery = "UPDATE words SET clicks=clicks+1, wins=wins+ '$win' WHERE id= '$id'" 
+0

是你美麗的男人!我知道這會很簡單,有人告訴我你有一些特定的聲明,我猜他們是像我這樣的SQL noob:P 我已經測試過它,它的工作原理。非常感謝Sachin :) – 2011-03-22 17:15:21

+0

@David - 如果你有多個條件,你必須在WHERE子句中使用AND。未更新。 ;) – 2011-03-22 17:16:33