Moin Moin!
Hi Alexander,
vielen Dank für deine Geduld und Ratschläge :-)Warum willst Du die WERTE in lower case umsetzen?
Das will ich ja eigentlich nicht. Ich habe mich vermutlich nicht klar ausgedrückt.
Momentan suche ich noch nach der besten Möglichkeit wie mein bisheriger Code auf unterschiedlichen DBs läuft.
https://forum.selfhtml.org/?t=203232&m=1373823, https://forum.selfhtml.org/?t=203232&m=1374020
Angenommen ich mache das mit
$DBO->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
oder aber ich wandle alle Identifier beim migrieren von MySQL nach PG in Kleinbuchstaben um.
Wenn ich nun diese Funktion habe:
function getDirectoryName($dirkeyname){
global $DBO;
$dbSelectDirectories = $DBO->prepare("SELECT DirectoryPath FROM ir_directory WHERE DirectoryKeyName = :dirkeyname");
$dbSelectDirectories->bindParam(':dirkeyname', $dirkeyname);
$dbSelectDirectories->execute();
$found = $dbSelectDirectories->fetch(PDO::FETCH_ASSOC);
return $found['DirectoryPath'];
}//end function
>
> Dann ist der Return Wert leer, weil es diese Spalte in dieser Schreibweise nicht gibt. Ich muss also ändern in;
> `$found['directorypath']`{:.language-php}
Nicht zwingend. Du kannst auch dafür sorgen, dass das $found eine Instanz einer Klasse mit case insensitiven Properties wird. Das geht über \_\_set / \_\_get / \_\_isset / \_\_unset und PDO::FETCH\_CLASS.
Damit kannst Du die alten Namen beibehalten, PHP ruft die "magischen" Methoden auf und schreibt die Namen zur Laufzeit um (in lower oder upper case). Das bremst, wie sehr wird Dir ein Benchmark zeigen. Vermutlich wird der Umweg PHP nicht sonderlich viel Arbeit machen.
> Uund jetzt stellt sich mir halt die Frage was weniger Arbeit macht. Entweder ich lasse alles in der bisherigen Schreibweise mit "Groß- Kleinbuchstaben und maskiere die Spaltennamen mit Hochkomma "".
Und auf Dauer hast Du damit sehr viel Arbeit.
> Oder aber ich wandle alles in Kleinbuchstaben, was sicher Plattform übergreifend besser wäre.
Richtig.
> Hier aber hätte ich erheblich mehr Code.
Nö, wieso? Du änderst ein paar Bits im bestehenden Code von 0 auf 1 und hast damit alles in Kleinbuchstaben, alternativ änderst Du die Bits von 1 auf 0 und hast damit alles in Großbuchstaben. Der Code wird nicht ein Bit länger, abgesehen von den paar Zeichen, die einmalig PDO::CASE\_XXX setzen.
> Ich habe zwar fast alle SQL Abfragen, Inserts und Updates in eine Datei ausgelagert. Die Spaltennamen aber kommen doch in nahezu allen PHP Dateien vor.
Warum? Deine Beispielfunktion sorgt doch schon dafür, dass Du DirectoryPath nur ein einziges Mal ersetzen mußt. Es sei denn, Du nutzt sie nicht konsequent.
> Ich müsste also hunderte von Spaltennamen manuell suchen und ersetzen.
Nein, nicht manuell. Die DB kennst alle Spaltennamen. Baue eine Funktion, die Dir alle Deine Tabellen zusammensammelt. Baue eine Schleife, die für jede dieser Tabellen die Spaltennamen sammelt. Baue eine Funktion, die für jeden Spaltennamen in allen Quelltexten den Spaltennamen im mixed case sucht und durch lower case ersetzt -- nicht notwendigerweise sofort, sondern z.B. durch Erzeugen eines Hilfsscripts (z.B. mit find/xargs/sed).
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".