Seite 1 von 3

SQL Error : 1136 Column count doesn't match value count at..

Verfasst: 16.02.2005 20:27
von Lodda
Hallo,

ich habe leider erst heute mitbekommen das sich kein User mehr bei uns registrieren kann. Eine Mail die ich diesbezüglich mal bekam ist schon vier Monate alt und wurde wegen Urlaub damals einfach vergessen. Seit dieser Zeit und zu dieser Zeit habe ich viel rum probiert sodass sich eine Kontrolle über die neu installierten Mods bzw. Änderungen in der usercp_register.php von damals nicht machbar ist.

Die Fehlermeldung lautet:
Could not insert data into users table

DEBUG MODE

SQL Error : 1136 Column count doesn't match value count at row 1

INSERT INTO phpbb_users (user_id, username, user_regdate, user_password, user_email, user_icq, user_website, user_occ, user_from, user_from_flag, user_interests, user_plz, user_sig, user_sig_bbcode_uid, user_avatar, user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_skype, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_lang, user_style, user_gender, user_level, user_allow_pm, user_active, user_actkey, user_birthday, user_next_birthday_greeting) VALUES (4131, 'Testuserg42f3t5n53', 1108580763, '25f9e794323b453885f5181f1b624d0b', 'mich@egal.com', '', '', '', '', 'blank.gif', '', '', '', '', '', 0, 0, '', '', '', '', 1, 1, 0, 1, 1, 0, 1, 1, 1, 'D M d, Y g:i a', 'german', 1, '0', 0, 1, '4182', '4182', '2005', 0, '7e24e3ce5fa96')

Line : 714
File : /www/******/******/includes/usercp_register.php
Die Zeilen 713 – 715 meiner usercp_register.php lauten:

Code: Alles auswählen

{
message_die(GENERAL_ERROR, 'Could not insert data into users table', '', __LINE__, __FILE__, $sql);
}
Ich hab schon gesucht aber leider nichts gefunden, hoffe mir kann hier jemand helfen und den Fehler ausmerzen. Solltet Ihr noch mehr Informationen benötigen teile ich diese Euch natürlich sofort mit.

Ich bedanke mich schon einmal im voraus!

Verfasst: 16.02.2005 20:32
von Leuchte
Poste mal den Code oberhalb deines Zitats ab $sql = "INSERT INTO...
Da gibts einen Fehler mit Username und Regdate

...

Verfasst: 16.02.2005 20:52
von Lodda
Der lautet:

Code: Alles auswählen

$sql = "INSERT INTO " . USERS_TABLE . "	(user_id, username, user_regdate, user_password, user_email, user_icq, user_website, user_occ, user_from, user_from_flag, user_interests, user_plz, user_sig, user_sig_bbcode_uid, user_avatar, user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_skype, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_lang, user_style, user_gender, user_level, user_allow_pm, user_active, user_actkey, user_birthday, user_next_birthday_greeting)
VALUES ($user_id, '" . str_replace("\'", "''", $username) . "', " . time() . ", '" . str_replace("\'", "''", $new_password) . "', '" . str_replace("\'", "''", $email) . "', '" . str_replace("\'", "''", $icq) . "', '" . str_replace("\'", "''", $website) . "', '" . str_replace("\'", "''", $occupation) . "', '" . str_replace("\'", "''", $location) . "', '$user_flag', '" . str_replace("\'", "''", $interests) . "', '" . str_replace("\'", "''", $plz) . "', '" . str_replace("\'", "''", $signature) . "', '$signature_bbcode_uid', $avatar_sql, $viewemail, '" . str_replace("\'", "''", str_replace(' ', '+', $aim)) . "', '" . str_replace("\'", "''", $yim) . "', '" . str_replace("\'", "''", $msn) . "', '" . str_replace("\'", "''", $skype) . "', $attachsig, $allowsmilies, $allowhtml, $allowbbcode, $allowviewonline, $notifyreply, $notifypm, $popup_pm, $user_timezone, '" . str_replace("\'", "''", $user_dateformat) . "', '" . str_replace("\'", "''", $user_lang) . "', $user_style, '$gender', 0, 1, '$birthday', '$birthday', '$next_birthday_greeting', ";
			if ( $board_config['require_activation'] == USER_ACTIVATION_SELF || $board_config['require_activation'] == USER_ACTIVATION_ADMIN || $coppa )
			{
				$user_actkey = gen_rand_string(true);
				$key_len = 54 - (strlen($server_url));
				$key_len = ( $key_len > 6 ) ? $key_len : 6;
				$user_actkey = substr($user_actkey, 0, $key_len);
				$sql .= "0, '" . str_replace("\'", "''", $user_actkey) . "')";
			}
			else
			{
				$sql .= "1, '')";
			}

			if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) )
Besten Dank erst einmal!

Verfasst: 17.02.2005 12:06
von Leuchte

Code: Alles auswählen

'$birthday', '$birthday', '$next_birthday_greeting', ";
Lösch ein '$birthday',

Mein Dank!

Verfasst: 17.02.2005 19:50
von Lodda
Hallo Leuchte,

Du bist spitze!!!! Sag mal, wie gehst Du bei solchen Meldungen vor? Wie ist Dein Weg bei der Fehlersuche bzw. gehst Du vor? Ich mein, der Fehler sollte einem ja eigentlich ins Gesicht springen, ich habe ihn aber nicht gesehen und versteh das nicht. Um solche Sachen in der Zukunft besser im Griff zu bekommen wäre es wirklich hilfreich wenn Du mir Dein Geheimnis verrätst ;)

Vielen, vielen Dank!

Verfasst: 17.02.2005 20:17
von Leuchte
Das wichtigste ist der ausgegebene SQL Fehler: In deinem Fall
SQL Error : 1136 Column count doesn't match value count at row 1
.. bedeutet, dass es mehr Werte (Values) als Tabellenspalten gibt. Also muss dort etwas doppelt sein - wie man sieht ;)

Stimmt eigentlich aber....

Verfasst: 17.02.2005 20:50
von Lodda
Ich persönlich plädiere auf eine deutsche Sprachausgabe für PHP und SQL, dieses technische englisch liegt mir ehrlich gesagt nicht so aber Du hast natürlich recht!

Verfasst: 21.08.2005 02:49
von aibo
Leuchte hat geschrieben:Also muss dort etwas doppelt sein - wie man sieht ;)
Oder etwas zu wenig. ;-)

Hatte den selben Fehler.
Habe folgenden Code vergessen:
, '" . str_replace("\'", "''", $info) . "'
Gruß
aibo

Augenfehler ...

Verfasst: 26.10.2005 13:39
von Lord-Blackwolf
Hi Boarders,...

ich hab den gleichen Fehler,... hab auch Eure Posts gelesen, finde aber irgendwie den Zusammenhang zwischen den Rubriken (user_id, username, user_regdate, ...) und der Abgrenzung der Values ($user_id, '" . str_replace("\'", "''", $username .....) nicht.

Code: Alles auswählen

$sql = "INSERT INTO " . USERS_TABLE . "	(user_id, username, user_regdate, user_password, user_email, user_icq, 
user_website, user_occ, user_from, user_interests, user_sig, 

--[gekürzt]--

, "''", $user_dateformat) 
. "', '" . str_replace("\'", "''", $user_lang) . "', $user_style, 0, 1, ";
			if ( $board_config['require_activation'] == USER_ACTIVATION_SELF || $board_config['require_activation'] == 
USER_ACTIVATION_ADMIN || $coppa )
Ich bin in SQL ein ziemlicher Dummy,... aber die Anzahl von Werten mit Rubriken zu vergleichen traue ich mir noch zu ... wenn ich nur wüsste, wie die Werte abgegrenzt sind .... *fg

Vielleicht gibt es ja ein Tool, mit dem man solche Anweisungen auf Plausibilität prüfen kann, d.h. was einem die Fehlermeldung auswirft, welche Variable nu eben kenen Inhalt hat.

(Ich weiss, Mysql arbeitet die Anweisung von links nach rechts ab und stellt am ende fest, das zu wenig Kekse in der Dose sind ...*g)

Greetz

Blackwolf

---[edit]----

Ich habe nunmehr den Fehler selbst gefunden:

Da hier die Frage auftaucht, wie man bei soetwas vorgeht, beschreibe ich mal, wie ich als Laie in Mysql das Ding gefixt habe:

1. Fehlermeldung genau lesen ....
(Da stand ja schon die Zeilennummer drin)

2. Forum lesen
(Der Hinweis mit der über-/unterzähligen Variable war der Hint.)

Da ich nun - wie oben schon gesagt - nicht wusste, wie sich die Felder voneinender unterscheiden, hab ich mir den Fehler nocheinmal angesehen, die Unterteilung waren Kommas. Also ...

3. komplette Zeile (sql-Tabelle und Werte) rauskopiert aus dem Editor und in Notepad gepastet.

4. Nach jeder Feldbeschreibung ein (CR) gemacht, nach unten zu den Werten gegangen die Variable gesucht (sollte ja immer die nächste sein) und nach oben gepastet.

5. Feststellung:
Zwei Werte passten nicht mit Feldnamen zusammen:

-------[EXAMPLE]--------
.....
user_avatar, ---> , $avatar_sql
user_avatar_type, ---> :oops:
user_viewemail, ----> , $viewemail
.....
user_timezone, ---> , $user_timezone
user_rankset_id, ---> :oops:
user_dateformat, ---> , '" . str_replace("\'", "''", $user_dateformat). "'
.....
-------[/EXAMPLE]--------

6. Da der Verdacht auf dem unteren Wert lag, hab ich das ganze mit einer "sauberen" includes/usercp_register.php gemacht und dabei festgestellt, das die "fehlende" Zuweisung für den avatar_type oki ist.

7. Nochmal die MOD-Anleitung für den extended-RANK MOD herangezuppelt, die Passage über die includes/usercp_register.php nochmal überprüft und ... festgestellt das die Anweisung:

Code: Alles auswählen

#-----[ IN-LINE FIND ]---------------------------------------------------
# 
$user_timezone

# 
#-----[ IN-LINE AFTER, ADD ]---------------------------------------------------
# 
, $rankset
bei der Bearbeitung vergessen wurde.

8. Variable eingefügt, UPLOAD und .... :grin:

Danke für alle, die evtl. nach einem Fehler im Code gesucht haben und mir helfen wollten.

Greetz

Blackwolf

Verfasst: 26.10.2005 14:45
von Markus67
Hi ...

Wie lautet denn die Fehlermeldung?
Dann verlinke gleich die usercp_register.php

Markus