2014-10-12 2 views
-2
«Количество столбцов не совпадает с количеством значений в строке 1»

из следующего кода:

function rememberData($_POST) { 
    foreach ($_POST as $key => $value) { 
     $_SESSION[$key] = $value; 
    } 
    return $_SESSION; 
} 

Выше я сохранил $ _POST в $ _SESSION. Я вызываю метод на другой странице. Просто опубликуйте его, чтобы показать процесс.

$columns = implode(",", array_keys($_SESSION)); 
$values = implode(",", array_values($_SESSION)); 

$sql = "INSERT INTO table ($columns) VALUES ('$values')"; 
// Execute query 
if (mysqli_query($connection,$sql)) { 
    echo "$key column was added"; 
} else { 
    echo "Error adding columns: " . mysqli_error($connection); 
} 

Я сохранил все данные $ _POST из формы в $ _SESSION, используя foreach. Данные отлично совпадают с ключами, когда я var_dump сеанс. Я понимаю, что это не безопасно, но это не важно. Кто-нибудь знает, почему я продолжаю получать эту ошибку MYSQL?

Редактировать: Добавлено как я установил $ _SESSION. Я делаю это, поэтому у меня есть доступ к данным POST для нескольких страниц.

Редактировать 2: ниже сказано, что у меня есть синтаксическая ошибка: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с именем «», «Date0», «Day0», «UnitHours0», «ProjectHours0», «QwestMark0», «TotalTickets0», «в строке 1

Так что я думал, что это единственные кавычки в начале и конце, но если я обрезаю те, они не уйдут. Это должен быть только браузер, отображающий информацию? В моем коде нет ни одной кавычки. Это подтверждается var_dump.

foreach ($_SESSION as $key => $value) { 
    $columns .= "\"$key\"" . ","; 
    $values .= "\"$value\"" . ","; 
} 
$columns = rtrim($columns, ","); 
$values = rtrim($values, ","); 

echo $sql = "INSERT INTO tables ($columns) VALUES ($values)"; 
// Execute query 
if (mysqli_query($connection,$sql)) { 
    echo "$key column was added"; 
} else { 
    echo mysqli_error($connection); 
} 
+1

'' $ values'' имеет некоторые дополнительные символы, которых у него не должно быть - можете ли вы догадаться, что это такое? – Marty

+0

'$ _SESSION', может быть, вы хотите использовать некоторые, как будто это' $ _SESSION ['name'] 'его просто предположение, разместите код, в котором вы устанавливаете сеанс. Догадки обычно не работают. Спасибо –

+0

Почему бы не повторить ваш '$ sql' и посмотреть, сколько столбцов и значений у него есть? – Rasclatt

ответ

0

Зачем вы цитируете ключи, это должно быть обратные записи.

Для значений двойных кавычек отлично, холостые более распространены, хотя:

foreach ($_SESSION as $key => $value) { 
    $columns .= "`$key`" . ","; 
    $values .= "'$value'" . ","; 
} 

Что касается подготовки запроса его не только для безопасности, если у вас есть плохие символы (такие как одинарные кавычки) он сломается запрос, по крайней мере, использует mysqli_real_escape_string.

+0

Это исправлено! Знаете ли вы, почему двойные кавычки вызывали проблему против обратных выходов? – user275667

+0

потому что вы не указываете имена столбцов только значения, и это необходимо, если они являются varchar-типом. тики будут просто избегать проблем с зарезервированным ключевым словом – meda

+0

@ user275667 Удивительно, вы приняли ответ, в котором точно сказано, что я пытался объяснить вам почти час ... – Shomz

1

Ты ставишь целых $ значения в кавычки, что делает его одной строки, а вместо каждого из его значений должны быть отдельной строкой.

$sql = "INSERT INTO table ($columns) VALUES ('$values')"; 
              ^here^

Это делает в, например:

$sql = "INSERT INTO table ('column1', 'column2') VALUES ('value1, value2')"; 

это означает, что значение первого столбца 'value1, value2' и нет никакого значения для второго столбца. Вместо этого, он должен выглядеть следующим образом:

$sql = "INSERT INTO table ('column1', 'column2') VALUES ('value1', 'value2')"; 

Из-за этого, ваш код будет работать только если $ _SESSION имеет один или элементов.

+0

Если я удалю их, я получаю следующее: Ошибка добавления столбцов: у вас есть ошибка в синтаксисе SQL; – user275667

+0

Вы, вероятно, не обернули ** каждое ** значение в кавычки, вставили их в исходное состояние. – Shomz

+0

См. Edit 2. Оба столбца и $ value выглядят отлично, когда они повторяются. – user275667

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