i am trying to run an SQL query in PHP.. using this below code:
$sql="INSERT into members (forename, surname, dob_day, dob_month, dob_year, gender, address, invested, patrol_type, patrol, dr_address,
parent1_contact1_title, parent1_contact1_forename, parent1_contact1_surname, parent1_contact1_email, parent1_contact1_address, parent1_contact1_home, parent1_contact1_mobile, parent1_contact1_other,
parent1_contact2_title, parent1_contact2_forename, parent1_contact2_surname, parent1_contact2_email, parent1_contact2_address, parent1_contact2_home, parent2_contact1_mobile, parent1_contact2_other,
parent2_contact1_title, parent1_contact1_forename, parent1_contact1_surname, parent1_contact1_email, parent1_contact1_address, parent1_contact1_home, parent1_contact1_mobile, parent1_contact1_other,
parent1_contact2_title, parent1_contact2_forename, parent1_contact2_surname, parent1_contact2_email, parent1_contact2_address, parent1_contact2_home, parent2_contact1_mobile, parent1_contact2_other
) values ('".addslashes($_POST["forename"])."', '".addslashes($_POST["surname"])."', '".addslashes($_POST["dob_day"])."', '".addslashes($_POST["dob_month"])."', '".addslashes($_POST["dob_year"])."', '".addslashes($_POST["gender"])."', '".addslashes($_POST["address"])."', '".addslashes($_POST["invested"])."', '".addslashes($_POST["patrol_type"])."', '".addslashes($_POST["patrol"])."', '".addslashes($_POST["dr_address"])."',
'".addslashes($_POST["parent1_contact1_title"])."', '".addslashes($_POST["parent1_contact1_forename"])."', '".addslashes($_POST["parent1_contact1_surname"])."', '".addslashes($_POST["parent1_contact1_email"])."', '".addslashes($_POST["parent1_contact1_address"])."', '".addslashes($_POST["parent1_contact1_home"])."', '".addslashes($_POST["parent1_contact1_mobile"])."', '".addslashes($_POST["parent1_contact1_other"])."',
'".addslashes($_POST["parent1_contact2_title"])."', '".addslashes($_POST["parent1_contact2_forename"])."', '".addslashes($_POST["parent1_contact2_surname"])."', '".addslashes($_POST["parent1_contact2_email"])."', '".addslashes($_POST["parent1_contact2_address"])."', '".addslashes($_POST["parent1_contact2_home"])."', '".addslashes($_POST["parent1_contact2_mobile"])."', '".addslashes($_POST["parent1_contact2_other"])."',
'".addslashes($_POST["parent2_contact2_title"])."', '".addslashes($_POST["parent1_contact2_forename"])."', '".addslashes($_POST["parent1_contact2_surname"])."', '".addslashes($_POST["parent1_contact2_email"])."', '".addslashes($_POST["parent1_contact2_address"])."', '".addslashes($_POST["parent1_contact2_home"])."', '".addslashes($_POST["parent1_contact2_mobile"])."', '".addslashes($_POST["parent1_contact2_other"])."'
) ";
but i am getting an error saying: Column count doesn't match value count at row 1
i cannot find where the error is - can anyone find this?
I copied your query into a text editor. I split it in lines using the comma as a delimiter and I have 43 columns and 35 values.
Use fewer columns in your tables and split the records in generalized patterns, like this:
Table students:
id, forename, surname, details, parent1_id, parent2_id, etc..
Table parents:
id (used in table students), name, contact details, etc..
Your insert query has these columns more than once:
parent1_contact2_title, parent1_contact2_forename, parent1_contact2_surname, parent1_contact2_email, parent1_contact2_address, parent1_contact2_home, parent2_contact1_mobile, parent1_contact2_other
But don't appear in the query twice. Hence the column count that you have specified is different from the values you supply.
You have error in column names, some of them are duplicated:
$sql="INSERT into members (forename, surname, dob_day, dob_month, dob_year, gender, address, invested, patrol_type, patrol, dr_address,
parent1_contact1_title, parent1_contact1_forename, parent1_contact1_surname, parent1_contact1_email, parent1_contact1_address, parent1_contact1_home, parent1_contact1_mobile, parent1_contact1_other,
parent1_contact2_title, parent1_contact2_forename, parent1_contact2_surname, parent1_contact2_email, parent1_contact2_address, parent1_contact2_home, parent2_contact1_mobile, parent1_contact2_other,
parent2_contact1_title, parent1_contact1_forename, parent1_contact1_surname, parent1_contact1_email, parent1_contact1_address, parent1_contact1_home, parent1_contact1_mobile, parent1_contact1_other,
parent1_contact2_title, parent1_contact2_forename, parent1_contact2_surname, parent1_contact2_email, parent1_contact2_address, parent1_contact2_home, parent2_contact1_mobile, parent1_contact2_other
)
for example parent1_contact1_forename
is duplicated, fix column names to relevant
This is because the number of columns in your table and the number values you supplied in the table is different. The errors says that the number of columns specified in the sql statement donot match the number of values supplied.
For e.g if i have a table with name test and columns as follows:
1). id
2). name
3). age
4). Sex
Now lets create insert data in this table
$con = mysqli_connect("host","user","pass","dbName");
if(!$con)
die();
$res = mysqli_query($con,"INSERT INTO test(id,name,age,sex) VALUES(abc,xyz,pqr)");
//the query statement will generate an error similar to your's because the number
//of parameters to be filled does not match the values supplied
These are your database fields:
$sql="INSERT into members (
forename,
surname,
dob_day,
dob_month,
dob_year,
gender,
address,
invested,
patrol_type,
patrol,
dr_address,
parent1_contact1_title,
parent1_contact1_forename,
parent1_contact1_surname,
parent1_contact1_email,
parent1_contact1_address,
parent1_contact1_home,
parent1_contact1_mobile,
parent1_contact1_other,
parent1_contact2_title,
parent1_contact2_forename,
parent1_contact2_surname,
parent1_contact2_email,
parent1_contact2_address,
parent1_contact2_home,
parent2_contact1_mobile,
parent1_contact2_other,
parent2_contact1_title,
parent1_contact1_forename,
parent1_contact1_surname,
parent1_contact1_email,
parent1_contact1_address,
parent1_contact1_home,
parent1_contact1_mobile,
parent1_contact1_other,
parent1_contact2_title,
parent1_contact2_forename,
parent1_contact2_surname,
parent1_contact2_email,
parent1_contact2_address,
parent1_contact2_home,
parent2_contact1_mobile,
parent1_contact2_other
These are the values your are trying to store:
'".addslashes($_POST["forename"])."',
'".addslashes($_POST["surname"])."',
'".addslashes($_POST["dob_day"])."',
'".addslashes($_POST["dob_month"])."',
'".addslashes($_POST["dob_year"])."',
'".addslashes($_POST["gender"])."',
'".addslashes($_POST["address"])."',
'".addslashes($_POST["invested"])."',
'".addslashes($_POST["patrol_type"])."',
'".addslashes($_POST["patrol"])."',
'".addslashes($_POST["dr_address"])."',
'".addslashes($_POST["parent1_contact1_title"])."',
'".addslashes($_POST["parent1_contact1_forename"])."',
'".addslashes($_POST["parent1_contact1_surname"])."',
'".addslashes($_POST["parent1_contact1_email"])."',
'".addslashes($_POST["parent1_contact1_address"])."',
'".addslashes($_POST["parent1_contact1_home"])."',
'".addslashes($_POST["parent1_contact1_mobile"])."',
'".addslashes($_POST["parent1_contact1_other"])."',
'".addslashes($_POST["parent1_contact2_title"])."',
'".addslashes($_POST["parent1_contact2_forename"])."',
'".addslashes($_POST["parent1_contact2_surname"])."',
'".addslashes($_POST["parent1_contact2_email"])."',
'".addslashes($_POST["parent1_contact2_address"])."',
'".addslashes($_POST["parent1_contact2_home"])."',
'".addslashes($_POST["parent1_contact2_mobile"])."',
'".addslashes($_POST["parent1_contact2_other"])."',
'".addslashes($_POST["parent2_contact2_title"])."',
'".addslashes($_POST["parent1_contact2_forename"])."',
'".addslashes($_POST["parent1_contact2_surname"])."',
'".addslashes($_POST["parent1_contact2_email"])."',
'".addslashes($_POST["parent1_contact2_address"])."',
'".addslashes($_POST["parent1_contact2_home"])."',
'".addslashes($_POST["parent1_contact2_mobile"])."',
'".addslashes($_POST["parent1_contact2_other"])."'
Either your copy/paste has gone haywire or your database structure needs to be reviewed due to a lot of duplicate data.