Thread DBD::SQLite - Datentypen (9 answers)
Opened by Kuerbis at 2025-09-25 07:36

Kuerbis
 2025-09-25 07:36
#197272 #197272
User since
2011-03-20
961 Artikel
BenutzerIn
[default_avatar]
Zur Zeit ist es so, dass in CPAN:App::DBBrowser mit
Code: (dl )
my $data_types = $sth->{TYPE};

die Datentypen ermittelt werden und dann Usereingaben entsprechen der Datentypen gequoted werden:
Code: (dl )
1
2
3
4
5
6
    if ( $is_numeric_data_type{$col} ) {
return $value;
}
else {
return $dbh->quote( $value );
}

Jetzt frage ich mich (nur für SQLite), ob es besser wäre, entsprechend der Art der eingegebenen Werte zu entscheiden, ob gequoted wird oder nicht:
Code: (dl )
1
2
3
4
5
6
    if ( looks_like_number $value ) {
return $value;
}
else {
return $dbh->quote( $value );
}


Warum es zu dieser Frage gekommen ist - hier ein Beispiel:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
id | vorname | nachname
---|---------|-----------
1 | Max | Mustermann
2 | Lena | Müller
3 | Jonas | Schmidt
4 | Lisa | Schneider
5 | Tim | Fischer
6 | Max | Mustermann
7 | Lena | Müller
8 | Paul | Meier
9 | Anna | Huber
10 | Julia | Wagner


Gequoted entsprechend des Datentyps:
Code: (dl )
1
2
3
SELECT *
FROM (SELECT "id", "vorname", "nachname", ROW_NUMBER() OVER (PARTITION BY "vorname","nachname" ORDER BY "id" ASC) AS "rn" FROM "namen") "t1"
WHERE "rn" > '1'

Code: (dl )
1
2
id | vorname | nachname | rn
---|---------|----------|---


Gequoted entsprechend der Art des Wertes:
Code: (dl )
1
2
3
SELECT *
FROM (SELECT "id", "vorname", "nachname", ROW_NUMBER() OVER (PARTITION BY "vorname","nachname" ORDER BY "id" ASC) AS "rn" FROM "namen") "t1"
WHERE "rn" > 1

Code: (dl )
1
2
3
4
id | vorname | nachname   | rn
---|---------|------------|---
7 | Lena | Müller | 2
6 | Max | Mustermann | 2


Im ersten Fall wird die eingegebene Konstante (1) gequoted, weil CPAN:DBD::SQLite VARCHAR als Fallback-Datentyp einsetzt, wenn kein deklarierter Datentyp vorhanden ist.

Welche Lösung ist vorteilhafter?

View full thread DBD::SQLite - Datentypen