в основном, используется 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 значений.