Ошибка MySQL: «Количество столбцов не соответствует количеству значений в строке 1» – помощь для начинающих

в основном, используется php & MySQL. Я начинающий.

То, что я пытаюсь сделать, – это зарегистрировать пользователя в моей базе данных, чтобы сохранить ввод формы в мой user_tb.

получите эту ошибку, когда я попытаюсь вставить значения в форму:

«Количество столбцов не соответствует количеству значений в строке 1»

Я думал, что это потому, что я не вставлял значение user_id (которое является автоматическим приращением), поэтому я попытался вставить '' в свой запрос для user_id, но все равно не повезло.

вот запрос:

$query = "INSERT INTO users_tb (user_id, user_status, user_gender, user_firstname, user_surname, student_number, user_email, user_dob, user_name, user_pass) VALUES('','$status','$gender','$firstname','$surname','$hnumber','$dob','$username','$password')"; mysql_query($query) or die(mysql_error()); mysql_close(); 

помогает ли это. Если вам нужен какой-либо другой код, просто скажите.

просто чтобы убедиться, что вставки не обязательно должны быть в том же порядке, что и поля в таблице?

большое спасибо,

Вам не хватает одного значения.

Для запросов, длинных с таким количеством столбцов (и если вы вставляете только одну строку), я бы предложил использовать следующий синтаксис INSERT, который намного легче читать и реже вызывает проблемы.

 $query = "INSERT INTO users_tb SET user_status = '". mysql_real_escape_string($status) ."', user_gender = '". mysql_real_escape_string($gender) ."', user_firstname = '". mysql_real_escape_string($firstname) ."', user_surname = '". mysql_real_escape_string($surname) ."', student_number = '". mysql_real_escape_string($hnumber) ."', user_email = '". mysql_real_escape_string($email) ."', user_dob = '". mysql_real_escape_string($dob) ."', user_name = '". mysql_real_escape_string($username) ."', user_pass = '". mysql_real_escape_string($password) ."'"; mysql_query($query) or die(mysql_error()); mysql_close(); 

У вас отсутствует значение для user_email .

 $query = "INSERT INTO users_tb ( user_status, user_gender, user_firstname, user_surname, student_number, user_email, user_dob, user_name, user_pass ) VALUES ( '$status', '$gender', '$firstname', '$surname', '$hnumber', '$email', -- <--- you forgot this! '$dob', '$username', '$password' )"; 

И просто напоминание: вы должны избегать значений, используя mysql_real_escape_string если вы этого еще не делаете.

Марк Байерс ответил на проблему, но не затронул этот вопрос:

просто чтобы убедиться, что вставки не обязательно должны быть в том же порядке, что и поля в таблице?

Нет, они не должны быть в том же порядке, что и столбцы в таблице, но список столбцов и список значений должны совпадать как по количеству, так и по типу данных. У вас есть проблема, которую заметил Марк. вам не хватает значения для user_email , что означает, что значение dob пытается перейти в этот столбец. MySQL видит, что для столбцов, которые вы указали, недостаточно, и сообщать об ошибке вам.

Column count doesn't match value count самом деле это довольно четкое сообщение, что необычно для двигателей баз данных. 🙂

Вы можете использовать эту простую функцию для создания запроса из массива $ _POST и списка разрешенных полей:

 function dbSet($fields) { $set=''; foreach ($fields as $field) { if (isset($_POST[$field])) { $set.="`$field`='".mysql_real_escape_string($_POST[$field])."', "; } } return substr($set, 0, -2); } 

используется так

 $table = "users_tb"; $fields = explode(" ","user_status user_gender user_firstname user_surname student_number user_email user_dob user_name user_pass"); $query = "INSERT INTO $table SET ".dbSet($fields); mysql_query($query) or trigger_error(mysql_error()." in ".$query); 

конечно, предполагается, что имена полей формы HTML соответствуют именам полей таблицы SQL, что очень удобно

у вас есть 10 полей, которые вы хотите вставить, но вы предоставляете только 9 значений

Вы указываете 10 столбцов, но у вас есть только 9 значений.