2013-12-17 3 views
1

Я использую foreach для цикла массива и обновления базы данных MySQL. Это мой кодОбновление базы данных MySQL с помощью PHP

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 и так далее, так что я был планирование сохранения константы уровня/Xp и просто изменение ключа.

Это выглядит хорошо для меня, и когда я тестировал sql с заранее заданными значениями, он обновлялся отлично, однако использование переменных не обновляется вообще. Я знаю, что переменные выходят из массива правильно, как если бы я возвращал их в строку с форвардом, который они распечатывают в правильном формате и порядке.

Является ли это моим форматированием, или я пропущу что-то еще?

+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

Это должен быть уровень («$ highscoretype»), потому что заголовок столбца - это уровень, а затем общий/атака/защита и т. Д. Для каждого столбца. Следовательно, мне просто нужно обновить уровень, а затем конкретный навык. Как я могу повторить запрос? –

+0

Переход от «до» не имеет значения, я попробовал его. –

+0

Почему скобки? «Уровень (общий)» - имя столбца или «Leveloverall»? – jwulf

Смежные вопросы