2012-08-16 48 views
8

Tôi đang tạo đăng ký và tôi đang sử dụng thẳng PHP không phải JavaScript để gửi biểu mẫu của tôi tới cơ sở dữ liệu MySQL, vì vậy mọi thứ đều hoạt động tốt, không có lỗi cú pháp hoặc bất cứ điều gì nhưng tôi điền vào tất cả thông tin của tôi và nhấp vào 'Đăng ký' và nó trả về một thông báo cho biết 'Số lượng cột không khớp với số lượng giá trị ở hàng 1'.PHP ~ Số lượng cột không khớp với số lượng giá trị tại hàng 1

Tôi chỉ 14 vì vậy điều này khá khó hiểu đối với tôi, có ai có giải pháp không?

Đây là INSERT của tôi vào mã:

$sql = mysql_query("INSERT INTO users(firstname, lastname, email, password, day, month, year, gender) 
VALUES('$firstname','$lastname','$email','$db_password','$day','$month','$year')") 
or die (mysql_error()); 
+0

Bạn có thể xin vui lòng gửi mã PHP của bạn? – ChrisM

+2

Có lẽ là kết quả của câu lệnh 'INSERT' có nhiều hoặc ít giá trị bên trong' VALUES() 'hơn được liệt kê trong các cột'() '. Đăng mã của bạn và chúng tôi sẽ có một cái nhìn. –

+1

Điều này có liên quan đến sql của bạn nhiều hơn số php – Sablefoste

Trả lời

16

Bạn đang cố gắng chèn 7 giá trị vào 8 cột - bạn thiếu chèn giới tính.

Mã đúng sẽ là:

$sql = mysql_query("INSERT INTO users(firstname, lastname, email, password, day, month, year, gender) 
VALUES('$firstname','$lastname','$email','$db_password','$day','$month','$year', '$gender')") 
or die (mysql_error()); 

Bằng cách này, nếu bạn chưa làm việc đó, tôi khuyên bạn nên thoát khỏi chuỗi đầu tiên, trước khi chuyển chúng đến các truy vấn như vậy:

$firstname=mysql_real_escape_string($firstname) 

Bạn nên làm điều này với tất cả các biến ở trên. Here bạn có thể tìm thêm thông tin về chức năng thoát.

+0

Ôi trời .... Tôi là một người mới, tôi cũng có xu hướng phạm sai lầm đó: ( – Will

+0

Không vấn đề gì, vui mừng được giúp đỡ và chào mừng bạn đến với SO! Vui lòng chấp nhận câu trả lời giúp bạn nhiều nhất bằng cách nhấp vào dấu kiểm màu xanh lục trên – weltschmerz

+1

Xong, nó đã giúp rất nhiều Tôi cũng đã làm mysql_real_escape_string, mọi thứ đang hoạt động bây giờ – Will

1

Với mã của bạn ở đó, tôi thấy bạn quên chèn $ giới.

Khi chèn dữ liệu vào bảng MySQL, bạn sẽ phải chỉ định dữ liệu nào đi vào cột nào. Bạn làm điều này bằng cách xác định tên cột trước khi GIÁ TRỊ phần:

INSERT INTO tblA (col1, col2) VALUES ('value1','value2'); 

Nếu bạn bỏ qua thông tin đó, MySQL sẽ mong đợi tất cả các cột:

Nếu bảng của bạn là như thế này:

CREATE TABLE tblA (
    col1 INT, 
    col2 INT 
); 

Bạn có thể chèn thông tin như thế này:

INSERT INTO tblA VALUES ('value1', 'value2'); 

Nếu bạn bỏ qua tên cột và không xác định các giá trị cho tất cả các cột, MySQL sẽ cung cấp thông báo "Số cột không khớp với giá trị đếm tại hàng" sẽ xảy ra, vì MySQL không biết phải đặt gì vào các cột bị thiếu. Với cấu trúc bảng như trên,

INSERT INTO tblA VALUES ('value1'); 

sẽ dẫn đến lỗi đó.

Ở chế độ không nghiêm ngặt, MySQL sẽ chèn giá trị mặc định cho các tên cột bị bỏ qua.

+0

Không khá - [Ở đây] (http://dev.mysql.com/doc/refman/5.1/en/insert.html) bạn có thể thấy rằng bạn không cần phải cung cấp dữ liệu cho cột _every_ - nó có thể ở trạng thái trống hoặc tự động được điền với cột mặc định. – weltschmerz

+0

@Charles, bạn hoàn toàn đúng, nhưng tôi đã cố gắng không đưa ra quá nhiều thông tin trong câu trả lời của tôi. ;) –

+0

@Charles, chỉ ở chế độ không nghiêm ngặt. Tôi đã thử nó, và tôi đã nhận được lỗi, ngay cả với mặc định được thiết lập. –

0

Bạn đã bỏ lỡ một giá trị cho cột giới tính (người cuối cùng)

+0

Oh god .... Tôi là một newb tôi cũng có xu hướng mắc lỗi đó :( – Will

0

Bạn đang thiếu hoàn toàn giá trị giới:

$sql = mysql_query("INSERT INTO users(firstname, lastname, email, password, day, month, year, gender) 
VALUES('$firstname','$lastname','$email','$db_password','$day','$month','$year', 'gender goes here')") 
or die (mysql_error()); 
Các vấn đề liên quan