Поэтому я мог бы просто забыть что-то глупое просто, но по существу я пытаюсь использовать ОБЛАСТЬ для ОБНОВЛЕНИЯ в MySQL через страницу PHP. У меня также есть тонна IF-заявлений, но, похоже, это не помогает.
<?php
include('config.php');
$username = $_POST['username'];
$charName = $_POST['charName'];
//ID MARKS
$idMarks = $_POST['IDmarks'];
//EXPERIENCE
$EXP = $_POST['EXP'];
$sql = "UPDATE characters
SET CASE
WHEN idMarks1 IS NULL THEN idMarks1 = '$idMarks'
WHEN idMarks2 IS NULL THEN idMarks2 = '$idMarks'
WHEN idMarks3 IS NULL THEN idMarks3 = '$idMarks'
WHEN idMarks4 IS NULL THEN idMarks4 = '$idMarks'
WHEN idMarks5 IS NULL THEN idMarks5 = '$idMarks'
WHEN idMarks6 IS NULL THEN idMarks6 = '$idMarks'
WHEN idMarks7 IS NULL THEN idMarks7 = '$idMarks'
WHEN idMarks8 IS NULL THEN idMarks8 = '$idMarks'
WHEN idMarks9 IS NULL THEN idMarks9 = '$idMarks'
WHEN idMarks10 IS NULL THEN idMarks10 = '$idMarks'
WHEN idMarks11 IS NULL THEN idMarks11 = '$idMarks'
WHEN idMarks12 IS NULL THEN idMarks12 = '$idMarks'
END
totalEXP = totalEXP + '$EXP',
remEXP = remEXP + '$EXP'
WHERE charName = '$charName' AND username = '$username';
";
if ($conn->query($sql) === TRUE) {
header("Location: ../lead.php");
} else {
echo "Error updating record: " . $conn->error;
}
?>
Идея здесь в том, что обновление добавит новое значение ($ idMarks) в первое нулевое значение, которое оно найдет, а затем перейдет к следующим столбцам EXP. Я не могу использовать массив из-за предыдущих проблем, с которыми я столкнулся с MySQL, и дело в том, что столбцы idMarks - это вид жидкости, следящие раны, раны заживают на шрамах или лимпах, татуировки постоянны и т.д. И т.д., Поэтому они настраиваются на другой странице. Есть ли у кого-нибудь идеи о том, как это сделать?
У вас есть PHP, зачем делать причуды в SQL?
$error = false;
for($i=1; $i<12; $i++) {
$sql = "UPDATE characters SET idMarks$i = '$idMarks'"
. " WHERE idMarks$i IS NULL AND charName = '$charName' AND username = '$username';";
$sql2 = "UPDATE characters SET totalEXP = totalEXP + '$EXP', remEXP = remEXP + '$EXP'"
. " WHERE charName = '$charName' AND username = '$username';";
if ($conn->query($sql) !== TRUE) {
$error = 'Failed with 1';
break;
} else if ($conn->query($sql2) !== TRUE) {
$error = 'Failed with 2';
break;
}
}
if (empty($error))
header("Location: ../lead.php");
Я пропущу вопрос о том, "Откуда у вас эта ужасная схема БД", но в этом случае должны возникать такие вопросы, как "Я хочу сделать все в одном запросе" оптимизировать производительность "" необоснованным ".
Производительность SQL не может быть хорошей с помощью схемы с нумерованными столбцами. Сначала идет нормализация, и только в редких случаях вам понадобится денормализация.