[ic] indirect_login with AUTO_INCREMENT field
Bill Carr
bill at worldwideimpact.com
Thu Sep 28 14:34:36 EDT 2006
On Sep 28, 2006, at 10:51 AM, Stefan Hornburg wrote:
> Bill Carr wrote:
>> I can not figure out how to use indirect_login and an
>> AUTO_INCREMENT username column with my UserDB to create a new
>> account.
>> mysql> SHOW CREATE TABLE userdb;
>> CREATE TABLE `userdb` (
>> `username` int(11) NOT NULL auto_increment,
>> `email` varchar(128) NOT NULL default '',
>> `password` varchar(20) NOT NULL default '',
>> `acl` text,
>> ...
>> I've tried all kinds of combinations like below.
>> UserDB default <<EOD
>> {
>> userminlen => 1,
>> passminlen => 1,
>> crypt => 0,
>> time_field => 'mod_time',
>> database => 'userdb',
>> indirect_login => 'email',
>> logfile => 'userdb.log',
>> sql_counter => 'userdb:username',
>> assign_username => 1
>> }
>> I always end up with two records in my UserDB like so:
>> mysql> SELECT username,email,password FROM userdb ORDER BY
>> username DESC LIMIT 2;
>> +----------+--------------------------+----------+
>> | username | email | password |
>> +----------+--------------------------+----------+
>> | 1724 | | password |
>> | 1723 | bill at bottlenose-wine.com | |
>> +----------+--------------------------+----------+
>> It seems like I could make sure I have a numeric counter file with
>> a value at least as high as MAX(username) but that seems like
>> something that should be able to be avoided. Is there a way to
>> use an AUTO_INCREMENT username column with indirect_login in
>> Interchange?
>
> The problem is that IC creates first a record with just username/
> password and fills in the details later. Personally, I think
> accounts should created in an atomic operation.
Maybe I just don't understand the code but Interpolate::tag_counter
looks funky to me if using MySQL. I think the following will work
better:
--- /root/interchange-5.4.1/lib/Vend/Interpolate.pm 2005-12-23
09:59:44.000000000 -0500
+++ Vend/Interpolate.pm 2006-09-28 13:41:54.000000000 -0400
@@ -2139,9 +2139,9 @@
);
}
elsif($dsn =~ /^dbi:mysql:/i) {
- $seq ||= $tab;
- $dbh->do("INSERT INTO $seq VALUES
(0)") or die $diemsg;
- my $sth = $dbh->prepare("select
LAST_INSERT_ID()")
+ $seq = qq{($seq)} if $seq;
+ $dbh->do("INSERT INTO $tab $seq VALUES
(0)") or die $diemsg;
+ my $sth = $dbh->prepare("select
LAST_INSERT_ID()")
or die $diemsg;
$sth->execute
() or die
$diemsg;
($val) = $sth->fetchrow_array;
Bill Carr
Bottlenose - Wine & Spirits eBusiness Specialists
(877) 857-6700
http://www.bottlenose-wine.com
Download vCard
More information about the interchange-users
mailing list