MySQL unter WinXP vs. MySQL unter Linux
MySQL unter WinXP vs. MySQL unter Linux
am 31.08.2005 22:20:17 von Maik Toth
Hallo NG,
habe mal eine generelle Frage zu Datenbankzugriffen auf eine MySQL DB.
Meine lokale DB läuft unter WinXP und hier geht auch alles Butterweich.=
Ich
kann Daten einfügen, ändern, löschen uvm. Aber sobald ich das ganze=
Zeug auf
meinen Webspace stelle klappt fast gar nichts mehr. Ich nehme nun mal in =
meiner
Naivität an, dass man beim Zugriff auf eine DB unter Linux einiges mehr=
=20
beachten muss
als unter Windows.
Leider hab ich keine Ahnung auf was ich genau achten muss. Daher wäre=20
ich über jeden Tipp
oder Link dankbar.
Danke und Grüße,
Maik.
Re: MySQL unter WinXP vs. MySQL unter Linux
am 31.08.2005 22:27:18 von Alexander Meins
Maik Toth schrieb:
> Hallo NG,
> meinen Webspace stelle klappt fast gar nichts mehr. Ich nehme nun mal in
> meiner
> Naivität an, dass man beim Zugriff auf eine DB unter Linux einiges mehr
> beachten muss
> als unter Windows.
Ist eventuell der MySql Login mit DB-Name, Userid usw. auf dem Webspace
ein anderer?
Mir sind sonst weiter keine Probleme bei einem ähnlichen Vorgehen gekommen.
A.
Re: MySQL unter WinXP vs. MySQL unter Linux
am 31.08.2005 22:31:08 von Martin Kurz
Maik Toth schrieb:
> Hallo NG,
>
> habe mal eine generelle Frage zu Datenbankzugriffen auf eine MySQL DB.
> Meine lokale DB läuft unter WinXP und hier geht auch alles Butterweich. Ich
> kann Daten einfügen, ändern, löschen uvm. Aber sobald ich das ganze Zeug
> auf
> meinen Webspace stelle klappt fast gar nichts mehr. Ich nehme nun mal in
> meiner
> Naivität an, dass man beim Zugriff auf eine DB unter Linux einiges mehr
> beachten muss
> als unter Windows.
>
> Leider hab ich keine Ahnung auf was ich genau achten muss. Daher wäre
> ich über jeden Tipp
> oder Link dankbar.
>
> Danke und Grüße,
> Maik.
>
Im Grunde sollte der Zugriff unabhängig vom OS, auf der die DB läuft,
funktionieren. Hast Du eventuell ein paar Beispiele für auftretende Probleme?
Da Du von Webspace sprichst, vermute ich mal, dass Du keinen Vollzugriff auf die
DB hast. Eventuell versuchst Du ja einfach, Aktionen auf der DB auszuführen, für
die Du keine Berechtigung hast, bspw das erstellen neuer Datenbanken (obwohl du
bspw nur Zugriff auf eine fest definierte datenbank hast).
Was meldet denn mysql_error()? (Siehe
http://www.php.net/manual/de/function.mysql-error.php)
Grüße,
Martin
Re: MySQL unter WinXP vs. MySQL unter Linux
am 31.08.2005 22:40:25 von Michael Obi
Hi!
> habe mal eine generelle Frage zu Datenbankzugriffen auf eine MySQL DB.
> Leider hab ich keine Ahnung auf was ich genau achten muss. Daher wäre
> ich über jeden Tipp
> oder Link dankbar.
Was für ein PHP & MySQL Version läuft bei Dir und welche am Webspace?
Michael
Re: MySQL unter WinXP vs. MySQL unter Linux
am 31.08.2005 22:54:47 von Axel Schwenke
Maik Toth wrote:
>
> habe mal eine generelle Frage zu Datenbankzugriffen auf eine MySQL DB.
> Meine lokale DB läuft unter WinXP und hier geht auch alles Butterweich.
> Ich kann Daten einfügen, ändern, löschen uvm. Aber sobald ich das ganze
> Zeug auf meinen Webspace stelle klappt fast gar nichts mehr.
Geht es vielleicht auch etwas präziser? Was meinst du mit "das
ganze Zeug auf meinen Webspace stellen" und ganz besonders was
mit "klappt fast gar nichts mehr"?
Eigentlich verhält sich MySQL aus Nutzersicht überall gleich.
Abgesehen von individueller Konfiguration und installierter Version
natürlich. Vermutlich hast du aber bei "Webspace" (wieder so ein
schwammiger Begriff) erheblich weniger Einfluß als wenn der MySQL-
Server auf deiner persönlichen Daddelkiste läuft.
XL
Re: MySQL unter WinXP vs. MySQL unter Linux
am 31.08.2005 23:15:36 von Gerald Forster
Maik Toth wrote:
> habe mal eine generelle Frage zu Datenbankzugriffen auf eine MySQL DB.
> Meine lokale DB läuft unter WinXP und hier geht auch alles Butterweich. Ich
> kann Daten einfügen, ändern, löschen uvm. Aber sobald ich das ganze Zeug auf
> meinen Webspace stelle klappt fast gar nichts mehr. Ich nehme nun mal in
Unterschied z. B. bei Datenbank- und Tabellennamen:
Unter Linux muss hier auf Groß-/Kleinschreibung geachtet werden.
Beste Grüße
Gerald
--
Gerald Forster
Mail: "x" entfernen - remove "x"
Die Website mit Kalenderservice:
http://www.gerald-forster.at
Re: MySQL unter WinXP vs. MySQL unter Linux
am 31.08.2005 23:16:21 von Maik Toth
Michael Obi wrote:
> Hi!
>=20
>> habe mal eine generelle Frage zu Datenbankzugriffen auf eine MySQL DB.=
>> Leider hab ich keine Ahnung auf was ich genau achten muss. Daher wär=
e=20
>> ich über jeden Tipp
>> oder Link dankbar.
>=20
> Was für ein PHP & MySQL Version läuft bei Dir und welche am Webspac=
e?
> Michael
N'Abend,
auf meinem lokalen Rechner habe ich die MySQL Version "MySQL 4.1.10a-nt" =
auf
dem Webspace läuft "MySQL 4.0.21-Max ".
Ich administriere die DB's auf dem Webspace über phpMyAdmin. Und da kan=
n ich
fast alle Aktionen von anlegen bis löschen alles ausführen. Während=
der=20
Laufzeit
habe ich jetzt den Fehler,
"No Database Selected - 1046".
Ich hänge jetzt einfach mal das Coding mit an. Die Verbindung zur DB=20
wird über
eine ausgelagerte Datei gemacht. Darin sind die Funktionen db_conn();=20
db_select() und db_disConn() definiert.
Die Verbindung zur DB klappt, zumindest bekomme ich
keine Fehlermeldung.
Alles klar? Bei mir nicht ;-) Aber danke für Eure Bemühungen.
Beste Grüße,
Maik
include "../design/html.inc";
include("../dbConnect/DBconnect.inc");
class writeToDB{
=09
function putToDB($data)
{
$id;
$datum;
$pilot;
$kennung;
$lehrer;
$zaehler_a;
$zaehler_e;
$abflug;
$s_zeit;
$landung;
$l_zeit;
$anzahl_l;
$tankmenge;
$zaehler_t;
$bezahlung;
$betrag;
$bemerkung;
$data =3D ereg_replace("[\"]",'',$data);
//Verbindung zur DB herstellen
//definiert in DBconnect.inc
db_conn();
for($i =3D 0; $i<=3D(substr_count($data,'&')-1);$i++)
{ $tmp_uebergabeString =3D split('&', $data);
=09
for($j =3D 0; $j<(substr_count($tmp_uebergabeString[$i],';'));$j++)
{ =09
$tmp_data =3D split(';', $tmp_uebergabeString[$i]);
$datum =3D $tmp_data[0];
$pilot =3D $tmp_data[1];
$kennung =3D $tmp_data[2];
$lehrer =3D $tmp_data[3];
$zaehler_a =3D $tmp_data[4];
$zaehler_e =3D $tmp_data[5];
$abflug =3D $tmp_data[6];
$s_zeit =3D $tmp_data[7];
$landung =3D $tmp_data[8];
$l_zeit =3D $tmp_data[9];
$anzahl_l =3D $tmp_data[10];
$tankmenge =3D $tmp_data[11];
$zaehler_t =3D $tmp_data[12];
$bezahlung =3D $tmp_data[13];
$betrag =3D $tmp_data[14];
$bemerkung =3D $tmp_data[15];=09
}//for($j =3D 0; $j<(substr_count($tmp_uebergabeString[$i],';'));$j+=
+)
//definiert in DBconnect.inc
db_select();
//SQL Statement
$insert =3D "INSERT INTO flugdaten (id, datum, pilot, Kennung,=20
lehrer, zaehler_a, zaehler_e, abflug, s_zeit, landung, l_zeit,=20
anzahl_l, tankmenge, zaehler_t, bezahlung, betrag, bemerkung) VALUES=20
('$id', '$datum', '$pilot', '$kennung', '$lehrer', '$zaehler_a',=20
'$zaehler_e', '$abflug', '$s_zeit', '$landung', '$l_zeit', '$anzahl_l',=20
'$tankmenge', '$zaehler_t', '$bezahlung', '$betrag', '$bemerkung')";
if(!mysql_query($insert))
{
print_r("
".mysql_error()." ".mysql_errno()."
");
}// if(!mysql_query($insert))
}//for($i =3D 0; $i<=3D(substr_count($data,'&')-1);$i++)
//definiert in DBconnect.inc
db_disConn();
}//function putToDB($data)
}//class writeToDB{
?>
Re: MySQL unter WinXP vs. MySQL unter Linux
am 31.08.2005 23:59:11 von Martin Kurz
> Ich administriere die DB's auf dem Webspace über phpMyAdmin. Und da kann
> ich
> fast alle Aktionen von anlegen bis löschen alles ausführen. Während der
> Laufzeit
> habe ich jetzt den Fehler,
>
> "No Database Selected - 1046".
>
> Ich hänge jetzt einfach mal das Coding mit an. Die Verbindung zur DB
> wird über
> eine ausgelagerte Datei gemacht. Darin sind die Funktionen db_conn();
> db_select() und db_disConn() definiert.
Doofe Frage, aber wie wählst Du die Datenbank aus und wählst Du auch die
richtige Datenbank aus? Vermutlich heißt die DB auf dem Webspace anders als
lokal und das auswählen der DB hat nicht funktioniert, der auftretende Fehler
wurde aber nicht abgefangen. In den geposteten Scriptteilen steht an den
relevanten Stelle ja leider immer nur "//definiert in DBconnect.inc ".
Martin
Re: MySQL unter WinXP vs. MySQL unter Linux
am 01.09.2005 00:00:58 von Stefan Rybacki
Maik Toth wrote:
> Michael Obi wrote:
>
>> Hi!
>>
>>> habe mal eine generelle Frage zu Datenbankzugriffen auf eine MySQL DB.
>>> Leider hab ich keine Ahnung auf was ich genau achten muss. Daher wäre
>>> ich über jeden Tipp
>>> oder Link dankbar.
>>
>>
>> Was für ein PHP & MySQL Version läuft bei Dir und welche am Webspace?
>> Michael
>
>
> N'Abend,
>
> auf meinem lokalen Rechner habe ich die MySQL Version "MySQL 4.1.10a-nt"
> auf
> dem Webspace läuft "MySQL 4.0.21-Max ".
>
> Ich administriere die DB's auf dem Webspace über phpMyAdmin. Und da kann
> ich
> fast alle Aktionen von anlegen bis löschen alles ausführen. Während der
> Laufzeit
> habe ich jetzt den Fehler,
>
> "No Database Selected - 1046".
>
> Ich hänge jetzt einfach mal das Coding mit an. Die Verbindung zur DB
> wird über
> eine ausgelagerte Datei gemacht. Darin sind die Funktionen db_conn();
> db_select() und db_disConn() definiert.
>
> Die Verbindung zur DB klappt, zumindest bekomme ich
> keine Fehlermeldung.
>
> Alles klar? Bei mir nicht ;-) Aber danke für Eure Bemühungen.
> Beste Grüße,
> Maik
>
>
>
>
> include "../design/html.inc";
> include("../dbConnect/DBconnect.inc");
> class writeToDB{
>
>
> function putToDB($data)
> {
>
> $id;
> $datum;
> $pilot;
> $kennung;
> $lehrer;
> $zaehler_a;
> $zaehler_e;
> $abflug;
> $s_zeit;
> $landung;
> $l_zeit;
> $anzahl_l;
> $tankmenge;
> $zaehler_t;
> $bezahlung;
> $betrag;
> $bemerkung;
> $data = ereg_replace("[\"]",'',$data);
>
> //Verbindung zur DB herstellen
> //definiert in DBconnect.inc
> db_conn();
>
> for($i = 0; $i<=(substr_count($data,'&')-1);$i++)
> { $tmp_uebergabeString = split('&', $data);
>
> for($j = 0; $j<(substr_count($tmp_uebergabeString[$i],';'));$j++)
> {
> $tmp_data = split(';', $tmp_uebergabeString[$i]);
> $datum = $tmp_data[0];
> $pilot = $tmp_data[1];
> $kennung = $tmp_data[2];
> $lehrer = $tmp_data[3];
> $zaehler_a = $tmp_data[4];
> $zaehler_e = $tmp_data[5];
> $abflug = $tmp_data[6];
> $s_zeit = $tmp_data[7];
> $landung = $tmp_data[8];
> $l_zeit = $tmp_data[9];
> $anzahl_l = $tmp_data[10];
> $tankmenge = $tmp_data[11];
> $zaehler_t = $tmp_data[12];
> $bezahlung = $tmp_data[13];
> $betrag = $tmp_data[14];
> $bemerkung = $tmp_data[15];
> }//for($j = 0;
> $j<(substr_count($tmp_uebergabeString[$i],';'));$j++)
>
> //definiert in DBconnect.inc
> db_select();
>
> //SQL Statement
> $insert = "INSERT INTO flugdaten (id, datum, pilot, Kennung, lehrer,
> zaehler_a, zaehler_e, abflug, s_zeit, landung, l_zeit, anzahl_l,
> tankmenge, zaehler_t, bezahlung, betrag, bemerkung) VALUES ('$id',
> '$datum', '$pilot', '$kennung', '$lehrer', '$zaehler_a', '$zaehler_e',
> '$abflug', '$s_zeit', '$landung', '$l_zeit', '$anzahl_l', '$tankmenge',
> '$zaehler_t', '$bezahlung', '$betrag', '$bemerkung')";
>
> if(!mysql_query($insert))
> {
> print_r("
".mysql_error()." ".mysql_errno()."
");
> }// if(!mysql_query($insert))
>
> }//for($i = 0; $i<=(substr_count($data,'&')-1);$i++)
>
> //definiert in DBconnect.inc
> db_disConn();
> }//function putToDB($data)
>
> }//class writeToDB{
> ?>
Am interessantesten ist hier wohl db_select(); selektierst du auch die richtige Datenbank?
Bis denn dann
Stefan
Re: MySQL unter WinXP vs. MySQL unter Linux
am 01.09.2005 14:57:32 von Maik Toth
"Stefan Rybacki" wrote in message
news:3nmnkqF2a2elU2@individual.net...
> Maik Toth wrote:
> > Michael Obi wrote:
> >
> >> Hi!
> >>
> >>> habe mal eine generelle Frage zu Datenbankzugriffen auf eine MySQL DB.
> >>> Leider hab ich keine Ahnung auf was ich genau achten muss. Daher wäre
> >>> ich über jeden Tipp
> >>> oder Link dankbar.
> >>
> >>
> >> Was für ein PHP & MySQL Version läuft bei Dir und welche am Webspace?
> >> Michael
> >
> >
> > N'Abend,
> >
> > auf meinem lokalen Rechner habe ich die MySQL Version "MySQL 4.1.10a-nt"
> > auf
> > dem Webspace läuft "MySQL 4.0.21-Max ".
> >
> > Ich administriere die DB's auf dem Webspace über phpMyAdmin. Und da kann
> > ich
> > fast alle Aktionen von anlegen bis löschen alles ausführen. Während der
> > Laufzeit
> > habe ich jetzt den Fehler,
> >
> > "No Database Selected - 1046".
> >
> > Ich hänge jetzt einfach mal das Coding mit an. Die Verbindung zur DB
> > wird über
> > eine ausgelagerte Datei gemacht. Darin sind die Funktionen db_conn();
> > db_select() und db_disConn() definiert.
> >
> > Die Verbindung zur DB klappt, zumindest bekomme ich
> > keine Fehlermeldung.
> >
> > Alles klar? Bei mir nicht ;-) Aber danke für Eure Bemühungen.
> > Beste Grüße,
> > Maik
> >
> >
> >
> >
> > include "../design/html.inc";
> > include("../dbConnect/DBconnect.inc");
> > class writeToDB{
> >
> >
> > function putToDB($data)
> > {
> >
> > $id;
> > $datum;
> > $pilot;
> > $kennung;
> > $lehrer;
> > $zaehler_a;
> > $zaehler_e;
> > $abflug;
> > $s_zeit;
> > $landung;
> > $l_zeit;
> > $anzahl_l;
> > $tankmenge;
> > $zaehler_t;
> > $bezahlung;
> > $betrag;
> > $bemerkung;
> > $data = ereg_replace("[\"]",'',$data);
> >
> > //Verbindung zur DB herstellen
> > //definiert in DBconnect.inc
> > db_conn();
> >
> > for($i = 0; $i<=(substr_count($data,'&')-1);$i++)
> > { $tmp_uebergabeString = split('&', $data);
> >
> > for($j = 0;
$j<(substr_count($tmp_uebergabeString[$i],';'));$j++)
> > {
> > $tmp_data = split(';', $tmp_uebergabeString[$i]);
> > $datum = $tmp_data[0];
> > $pilot = $tmp_data[1];
> > $kennung = $tmp_data[2];
> > $lehrer = $tmp_data[3];
> > $zaehler_a = $tmp_data[4];
> > $zaehler_e = $tmp_data[5];
> > $abflug = $tmp_data[6];
> > $s_zeit = $tmp_data[7];
> > $landung = $tmp_data[8];
> > $l_zeit = $tmp_data[9];
> > $anzahl_l = $tmp_data[10];
> > $tankmenge = $tmp_data[11];
> > $zaehler_t = $tmp_data[12];
> > $bezahlung = $tmp_data[13];
> > $betrag = $tmp_data[14];
> > $bemerkung = $tmp_data[15];
> > }//for($j = 0;
> > $j<(substr_count($tmp_uebergabeString[$i],';'));$j++)
> >
> > //definiert in DBconnect.inc
> > db_select();
> >
> > //SQL Statement
> > $insert = "INSERT INTO flugdaten (id, datum, pilot, Kennung, lehrer,
> > zaehler_a, zaehler_e, abflug, s_zeit, landung, l_zeit, anzahl_l,
> > tankmenge, zaehler_t, bezahlung, betrag, bemerkung) VALUES ('$id',
> > '$datum', '$pilot', '$kennung', '$lehrer', '$zaehler_a', '$zaehler_e',
> > '$abflug', '$s_zeit', '$landung', '$l_zeit', '$anzahl_l', '$tankmenge',
> > '$zaehler_t', '$bezahlung', '$betrag', '$bemerkung')";
> >
> > if(!mysql_query($insert))
> > {
> > print_r("".mysql_error()." ".mysql_errno()."
");
> > }// if(!mysql_query($insert))
> >
> > }//for($i = 0; $i<=(substr_count($data,'&')-1);$i++)
> >
> > //definiert in DBconnect.inc
> > db_disConn();
> > }//function putToDB($data)
> >
> > }//class writeToDB{
> > ?>
>
> Am interessantesten ist hier wohl db_select(); selektierst du auch die
richtige Datenbank?
>
> Bis denn dann
> Stefan
Hi,
anbei die Datei in der die functionen definiert sind.
Die DB hab ich lokal genauso gennannt wie auf dem Webspace. Dort (auf dem
Webspace) ist der DB Name schon
vorgegeben.
//DB Parameter localhost
$host = "localhost";
$db = "usr_web308_2";
$conn = "null";
$user = "meinDBuser";
$pass = "meinDBpass";
function db_conn() {
global $conn;
global $host;
if(!($conn = mysql_connect($host, $user, $pass)))
{
die("Keine Verbindung zur Datenbank" . mysql_error());
}else {
echo ("Verbindung zur DB erfolgreich aufgebaut");
}
}
function db_select()
{
global $conn;
global $db;
$succ = mysql_select_db($db,$conn);
print_r("
".$succ."
");
}
function db_disConn() {
global $conn;
mysql_close($conn);
print("
Verbindung geschlossen");
}
?>
Danke & Grüße,
Maik.
Re: MySQL unter WinXP vs. MySQL unter Linux
am 01.09.2005 19:05:39 von Lothar Rosengarten
"Maik Toth" writes:
> //DB Parameter localhost
> $host = "localhost";
Ist das in der Online-Variante auch so drin?
LotharR
Re: MySQL unter WinXP vs. MySQL unter Linux
am 01.09.2005 21:21:07 von Matthias Esken
On Thu, 1 Sep 2005 14:57:32 +0200, Maik Toth wrote:
> $host = "localhost";
> $db = "usr_web308_2";
> $conn = "null";
> $user = "meinDBuser";
> $pass = "meinDBpass";
>
Als erstes: Bitte kürze Zitate sinnvoll. Die 183 Zeilen im vorigen Posting
mussten wirklich nicht sein.
Jetzt zum Problem:
> function db_conn() {
> global $conn;
> global $host;
> if(!($conn = mysql_connect($host, $user, $pass)))
> {
> die("Keine Verbindung zur Datenbank" . mysql_error());
> }else {
> echo ("Verbindung zur DB erfolgreich aufgebaut");
> }
> }
Wo sollen in der Funktion $user und $pass herkommen? Wahrscheinlich erlaubt
dein MySQL zu Hause eine Verbindung mit leerem User und genau das geht dann
auf dem Webspace fürchterlich daneben.
Ehe du jetzt aber anfängst, $user und $pass in der Funktion auch noch
global zu definieren, solltest du vielleicht noch mal ein wenig Grundlagen
studieren. Globale Variablen sind PFUI!
Übergib die benötigten Daten als Parameter und lass dir die
Verbindungskennung von der Funktion zurückgeben:
function db_conn($hostname, $username, $password) {
if(!($conn = mysql_connect($host, $user, $pass))) {
die("Keine Verbindung zur Datenbank" . mysql_error());
} else {
echo ("Verbindung zur DB erfolgreich aufgebaut");
return $conn;
}
}
$conn = db_conn($host, $user, $pass);
Ich würde ja noch ein paar Sachen anders gestalten, aber ich möchte dich ja
nicht direkt mit Änderungen erschlagen. Bei Bedarf können wir natürlich
gerne noch weitermachen.
Gruß,
Matthias
Re: MySQL unter WinXP vs. MySQL unter Linux
am 01.09.2005 23:19:12 von Stefan Rybacki
Matthias Esken wrote:
> ...
>
> Wo sollen in der Funktion $user und $pass herkommen? Wahrscheinlich erlaubt
> dein MySQL zu Hause eine Verbindung mit leerem User und genau das geht dann
> auf dem Webspace fürchterlich daneben.
>
> Ehe du jetzt aber anfängst, $user und $pass in der Funktion auch noch
> global zu definieren, solltest du vielleicht noch mal ein wenig Grundlagen
> studieren. Globale Variablen sind PFUI!
Warum genau sind globale Variables PFUI?
Bis denn dann
Stefan
>
>...
>
> Gruß,
> Matthias
Re: MySQL unter WinXP vs. MySQL unter Linux
am 01.09.2005 23:22:18 von b-j2000
"Stefan Rybacki" wrote:
> Warum genau sind globale Variables PFUI?
Such' mal nach David Parnas und Information Hiding, der wusste schon
1972, warum das PFUI ist!
Re: MySQL unter WinXP vs. MySQL unter Linux
am 01.09.2005 23:58:25 von Stefan Rybacki
Benjamin Geißelmeier wrote:
> "Stefan Rybacki" wrote:
>
>> Warum genau sind globale Variables PFUI?
>
>
> Such' mal nach David Parnas und Information Hiding, der wusste schon
> 1972, warum das PFUI ist!
Ich meinte eher warum das in dem Fall des OPs Pfui ist. Es ist klar, daß er Username und
Passwort usw. per Parameter übergeben sollte, aber zuletzt kommen diese Daten von globalen
Variablen oder etwa nicht? ;)
Bis denn dann
Stefan
Re: MySQL unter WinXP vs. MySQL unter Linux
am 02.09.2005 00:10:55 von Matthias Esken
On Thu, 01 Sep 2005 23:19:12 +0200, Stefan Rybacki wrote:
> Warum genau sind globale Variables PFUI?
Was bringen sie dir?
Aus einer C++ FAQ:
| Verwendet ein Softwarebauelement X (Funktion, Modul, Klasse...) eine
| globale Variable, so ist X automatisch abhängig von allen anderen
| Softwarebauelementen die diese globale Variable verändern. Eine Veränderung
| der globalen Variable in einer Art und Weise wie sie X nicht erwartet,
| führt möglicherweise dazu, dass X mnicht mehr richtig funktioniert.
Das ist nicht nur eine rein theoretische Abhandlung. Jeder, der mal damit
konfrontiert war, kennt dieses Problem. Ich habe mal ein Fremdprojekt
aufbohren müssen, das weit über 200 globale Variablen besaß. Das Ding war
ein riesiger Haufen Mist. Vermeintlich harmlose Änderungen an einer Stelle
bewirkten, dass an ganzen anderen Stellen die Software versagte.
Du hast bei globalen Variablen einfach keine Kontrolle mehr darüber was
passiert. In der FAQ zu dieser Gruppe findest du auch noch etwas dazu:
12.10. Vermeide globale Variablen
http://www.php-faq.de/q/q-sicherheit-global.html
| [...] Die Empfehlung, möglichst keine globalen Variablen zu verwenden
| bleibt jedoch bestehen: Der Namensraum von Funktionen und Klassen ist
| wesentlich besser kontrollierbar. Es ist daher empfehlenswert, so viel
| Funktionalität als möglich in Funktionen oder Klassen abzulegen und dort
| kontrolliert Variablen als Funktionsparameter zu importieren.
Die Aussage, dass globale Variablen PFUI sind, gilt unabhängig von der
Programmiersprache. Ich habe beim googlen[1] sofort Probleme im
Zusammenhang mit globalen Vaiablen mit PHP, Perl, C++, Lisp und RPG
gefunden und danach habe ich nicht weitergeschaut. Die anderen
Programmiersprachen wären sicher auch noch gekommen. Interessant ist
vielleicht auch noch die Beschreibung von möglichen Fehlern beim
Programmierpraktikum einer FH:
| Delphi Programmierpraktikum bzw. Vordiplomsprogramm :
| Häufige Fehler
| Hier möchte ich die in den Programmierpraktika am häufigsten gemachten
| Fehler aufführen. Die mit drei Sternen markierten Fehler führen immer zur
| Ablehnung des Testates
|
| [...]
|
| Globale Variablen dienen der Speicherung von Werten, welche auch zwischen
| den Aufrufen der Routinen gespeichert bleiben müssen (z.B.: Punktestand
| eines Spiels, internes Spielfeld). Alle anderen Werte können und müssen per
| Parameter weitergereicht werden. Der Einsatz von globalen Variablen als
| Schnittstellenersatz ist unzulässig. Dies gilt auch für
| Unterprozeduren/Unterfunktionen, für die bekanntermaßen die Variablen der
| übergeordneten Prozedur/Funktion als globale Variablen sichtbar sind. Der
| Gipfel hierbei ist, keiner Routine irgendwelche Schnittstellenparameter zu
| geben. (Das führt mit Sicherheit zur Ablehnung.)
Maiks Routine wäre hier nicht nur mit Pauken und Trompeten, sondern direkt
mit den Posaunen von Jericho durchgefallen. Aber es ist gut, dass er hier
gefragt hat. Möglicherweise bewahren wir ihn und andere durch die aktuelle
Diskussion vor einem großen Fehler, der sich früher oder später im Programm
zeigen würde.
Gruß,
Matthias
[1] Der Suchbegriff war: "globale variablen" schlecht
Re: MySQL unter WinXP vs. MySQL unter Linux
am 02.09.2005 00:16:06 von Matthias Esken
On Thu, 01 Sep 2005 23:58:25 +0200, Stefan Rybacki wrote:
> Ich meinte eher warum das in dem Fall des OPs Pfui ist. Es ist klar, daß er Username und
> Passwort usw. per Parameter übergeben sollte, aber zuletzt kommen diese Daten von globalen
> Variablen oder etwa nicht? ;)
Beim bisherigen Aufbau ja. Oder auch wieder nicht. Die Variablen sind
global, aber nicht superglobal. Er bemüht sich aber redlich, sie dazu zu
machen. ;-)
Besser wäre nach meinem Geschmack die Instanz einer Application-Klasse die
per Singleton erstellt wird und diese Daten kapselt und auf Anfrage
rausrückt.
Gruß,
Matthias
Re: MySQL unter WinXP vs. MySQL unter Linux
am 02.09.2005 20:24:38 von Maik Toth
Matthias Esken wrote:
> On Thu, 01 Sep 2005 23:19:12 +0200, Stefan Rybacki wrote:
>=20
>=20
>>Warum genau sind globale Variables PFUI?
>=20
>=20
>=20
> Maiks Routine wäre hier nicht nur mit Pauken und Trompeten, sondern d=
irekt
> mit den Posaunen von Jericho durchgefallen. Aber es ist gut, dass er hi=
er
> gefragt hat. Möglicherweise bewahren wir ihn und andere durch die akt=
uelle
> Diskussion vor einem großen Fehler, der sich früher oder später i=
m Programm
> zeigen würde.
>=20
> Gruß,
> Matthias
>=20
> [1] Der Suchbegriff war: "globale variablen" schlecht
Hallo zusammen,
hätte nicht gedacht, dass mein Thread so "ausmaße" an nimmt.
Trotzdem danke für die Erläuterung weshalb Globale Variablen "pfui" s=
ind.
Eigentlich soll es nur ein Fornular mit einer kleinen Routine werden und =
da habe ich
mir um so Sachen wie das Pro oder Kontra glob. Variablen keine Gedanken=20
gemacht, mae culpa :-)
Nochmals recht herzlichen dank. Allerdings funktioniert die Auswahl der=20
DB immer
noch nicht...
Gehe jetzt aber erstmal in Urlaub und kümmere mich erst wieder danach u=
m=20
das Problem,
ansonsten gibt es haue von der Mutti wenn sie nun auch im Urlaub zu kurz =
kommt.
In diesem Sinne noch ein schönes Wochenende,
Beste Grüße,
Maik.