2013-12-17 112 views
1

我正在使用foreach來循環數組並更新MySQL數據庫。 這是我的代碼用PHP更新MySQL數據庫

foreach($result['getHiscore'] as $highScoreType => $highScoreValues){ 
     $rank = $highScoreValues['rank']; 
     $lvl = $highScoreValues['lvl']; 
     $totalXp = $highScoreValues['totalxp']; 
mysqli_query($con,"UPDATE Users SET Level("$highScoreType") = $lvl,  Xp("$highScoreType") = $totalXp, 
    WHERE UserID= '1'"); 

} 

我試圖混爲一談單詞「級別」與$ highScoreType的內容,我的數據庫列標題是Leveloverall,Xpoverall,Levelattack,Xpattack等等,所以我計劃保持Level/Xp標題不變並且只是改變密鑰。

這對我來說看起來很好,當我用預先設定的值測試sql時,它的更新很好,但是使用變量根本不會更新。我知道變量正確地從數組中出來,因爲當我將它們以正確的格式和順序打印出來的foreach與它們內聯時,它們是內聯的。

它是我的格式是這個問題還是我在做缺少別的東西?

+2

使用單引號'( 「$ highScoreType」)'作爲'( '$ highScoreType')'和另外一個做同樣的。 –

回答

0

如果您迴應生成的SQL查詢,應該可以幫助您查看查詢中的任何問題。

它看起來很奇怪對我說:UPDATE Users SET Level("$highScoreType") = $lvl

難道不應該僅僅是UPDATE Users SET $highScoreType = $lvl

請注意,這種代碼對於SQL注入攻擊來說是很容易發生的,所以請始終對這些變量可能存在的問題保持警惕。

要打印查詢做:

$query = "UPDATE Users SET Level("$highScoreType") = $lvl,  Xp("$highScoreType") = $totalXp, WHERE UserID= '1'" 
echo $query 
mysqli_query($con, $query) 
+0

它需要是Level(「$ highscoretype」),因爲列標題是Level,然後是整體/攻擊/防禦等。因此,我只需要更新等級,然後是特定技能。我將如何去迴應查詢? –

+0

從「改爲」沒有什麼區別,我試過了。 –

+0

爲什麼括號?'Level(overall)'是列名還是'Leveloverall'? – jwulf