Thread [MySQL] Quote: Problem ... was sonst... (6 answers)
Opened by eisbeer at 2004-01-05 19:08

eisbeer
 2004-01-05 19:08
#35878 #35878
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also hallo zusammen.
Mein Problem:

Ich habe ein Sub namens &UpdateFromHash, die wird so
aufgerufen:
Code: (dl )
&UpdateFromHash($dbh,{'field' => 'new_value','nextfield'=>'new_value'},'tabelle',["field LIKE '%irgendwas%'","field2 = 'value'"],$limit);

Ich hoffe das erklärt soch von selbst :)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub UpdateFromHash {
my $DBH = $_[0] or &FatalError('DBx0001');
my %Fields = %{$_[1]} or &FatalError('DBx0006',['Fields']);
my $Table = $_[2] or &FatalError('DBx0006',['Table']);
my @Conds = @{$_[3]} or &FatalError('DBx0006',['Conditions']);
my $Limit = $_[4];
my $Statement;

$Statement = 'UPDATE '.$Table.' SET '.join (', ',&{sub{my @f;push @f, "$_ = ".$DBH->quote($Fields{$_}) for (keys(%Fields));return @f;}}).
' WHERE '.join (' AND ',@Conds).($Limit?" LIMIT $Limit":"").';';

if ($DBH->do($Statement)) {
return 1;
}
else {
&FatalError('DBx0007', [$Statement, $DBH->errstr()]);
}
}


Funktioniert prima. ABER:
Wenn ich jetzt zum Beispiel sowas machen will:
Code: (dl )
&UpdateFromHash($CFG{'DBH'},{ 'falselogins' => 'falselogins+1' }, 'users', ["name = '$Username'"],1);

also das bestehende Feld 'falselogins' um eins erhöhen,
setzt mir $dbh->quote() Hochkommas aussenrum, und
damit wird 'falselogins' nicht erhöht, sondern zu "falselogins+1"
gesetzt.

Also entweder lass ich diese (für meinen Zweck) sehr
komfortable Art des UPDATEs sein und schreibe meine
Statements jedesmal selber oder es gibt irgend ne blöde
Lösung dafür...\n\n

<!--EDIT|eisbeer|1073322809-->
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...

View full thread [MySQL] Quote: Problem ... was sonst...