sub getMudName { # Get a name or all names matching or abbreviated by given name # Parameter: Object, Name my ($dbobj, $type, $name) = @_; my $dbh = $dbobj->{$databasehandle}; $dbobj->{$errormsg} = ''; my $table; if($type eq 'i3') { $table = 'Intermud3'; } elsif($type eq 'i2') { $table = 'Intermud2'; } else { $dbobj->{$errormsg} = "Oops, invalid type: $type\n"; return undef; } # Tyes fun version: select Name from intermud2 where Name = 'Timewarp' or (0=(select count(*) from intermud2 where Name='Timewarp') and Name like 'Timewarp%') # my $stmS = "SELECT Name FROM $table WHERE Name like '$name%' order by "; my $stmS = "SELECT Name FROM $table WHERE Name like ? order by "; $stmS .= "length(Name)"; $dbobj->debug("getMudName: $stmS\n"); $stmS = $dbh->prepare($stmS); # my $res = $stmS->execute(); my $res = $stmS->execute($name . '%'); if(!$res) { $dbobj->{$errormsg} ="Can't select from $table: " . $dbh->errstr() . "\n"; return undef; } my $ids = $dbh->selectcol_arrayref($stmS); $dbobj->debug(Dumper($ids)); if(!$ids) { $dbobj->{$errormsg} = "No Name matching name: " . $stmS->err() . "\n"; return undef; } if(lc($ids->[0]) eq lc($name)) { return [$ids->[0]]; } return $ids; }