# Variablen in mySQL Abfrage



## MatMagic (25. Mai 2013)

Moin Community,

ich möchte die Columns der Tabelle einer mySQL Datenbank auslesen.
Wenn ich die Namen der DB und der Tabelle in die Abfrage eintrage funktioniert das auch:

DB = db471659069
Tabel = termine1

$result = mysql_query("SHOW COLUMNS FROM db471659069.termine1");

Sobald ich aber die Variablen verwende bekomme ich einen mySQL Error der mir nicht zur Lösung verhilft.

DB = db471659069 = $db_name
Tabel = termine1 = $table_name

$result = mysql_query("SHOW COLUMNS FROM $db_name.$table_name");

Fehlermeldung: "MySQL-Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
' at line 1"

Was mache ich falsch? Könnt ihr mir bitte helfen?


----------



## Cappaja (25. Mai 2013)

Versuch mal das:


```
$result = mysql_query("SELECT * FROM `termine1`");
```


----------



## MatMagic (25. Mai 2013)

Hallo Cappaja,
danke für die schnelle Antwort - aber ich möchte nicht den Inhalt ausgeben sondern die Columns auflisten und dafür eben die Variablen nutzen.


----------



## Cappaja (25. Mai 2013)

http://de.php.net/manual/de/function.mysql-field-name.php

Mittels


```
$res = mysql_query('select * from termine1');

echo mysql_field_name($res, 0);
```

greifst du auf den Namen der ersten Spalte zu. Mit 1 auf den nächsten usw...

Ist es das?

Grüße Cappaja


----------



## sheel (25. Mai 2013)

Der Variableninhalt wird wohl nicht stimmen.
Gib sie vor der Abfrage mal mit var_dump aus.


----------



## Cappaja (25. Mai 2013)

Falls du auf deinen Weg mit SHOW nicht verzichten musst versuch mal noch folgendes:


```
SHOW COLUMNS FROM '$mytable' FROM '$mydb';
```

Also Hochkommata um die Variablennamen und am besten trennen. Ich weiß nicht ob das beim Punktoperator funktioniert...

Grüße


----------



## MatMagic (25. Mai 2013)

@Cappaja
$res = mysql_query('select * from termine1');
echo mysql_field_name($res, 0);

Da bekomme ich die Fehlermeldung: No Database selcted

acuh beim Nutzen der Variable "$table_name"

@Sheel
Die Variablen haben den richtigen Inhalt - liegt es vielleicht daran das die Vars "escaped" werden müssen? Ich weiss nur nicht wie.

@Cappaja2

Hiermit: $result = mysql_query("SHOW COLUMNS FROM '$table_name' FROM '$db_name'");

bekomme ich diesen Fehler:

MySQL-Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''termine1
' FROM 'db471659069'' at line 1


----------



## Cappaja (25. Mai 2013)

Zu Fehler 1, du musst natürlich davor mittels mysql_select_db() deine Datenbank selektieren ansonsten funktioniert das sehr wohl.
http://php.net/manual/de/function.mysql-select-db.php

Zu Fehler 2, keine Ahnung. Also bei mir funktioniert es so

Schick doch einfach mal am besten den ganzen relevanten Code mit Variablendeklaration, so kann ich nur raten


----------



## MatMagic (25. Mai 2013)

$db_name = $_POST['db_name'];
$table_name = $_POST['mnu_table_select'];
$verbindung = mysql_connect ($host_name, $user_name, $pw)
or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");

$result = mysql_query("SHOW COLUMNS FROM $db_name.$table_name");


----------



## Cappaja (25. Mai 2013)

ach jetzt, du musst als zweiten parameter natürlich das Datenbankhandle mitgeben.

also


```
mysql_select_db("$db_name", $verbindung);
mysql_query("SHOW COLUMNS FROM '$table_name' FROM '$db_name'", $verbindung);
```

Allein aus diesem Grunde bevorzuge ich die mysqli Klasse...


----------



## MatMagic (25. Mai 2013)

Leider nein. Ich weiß doch das die Abfrage als solche völlig korrekt ist - da sie funktioniert - wenn ich keine Variablen verwende. Es liegt doch lediglich daran dem mySQL Server die richtige Syntax zu liefern. Aber ich sehe den Wald vor lauter Bäumen gerade nicht.

Wie ändere ich diese (funktionsfähige) Codezeile:

$result = mysql_query("SHOW COLUMNS FROM db471659069.termine1");

aber den Part "db471659069" als Variable $db_name
und den Part  "termine1" als Variable $table_name

Also so ähnlich:
$result = mysql_query("SHOW COLUMNS FROM $db_name.$table_name");

^funktioniert aber so nicht weil irgendwo in die Zeile Hochkommata oder weiss der Geier was rein muss 

Hüülfe...


----------



## sheel (25. Mai 2013)

Und noch mal meine Bitte, var_dump auf die zwei Variablen zu machen.
Direkt vor der Abfrage.

Und das Parsen mal nicht PHP überlassen (der Punkt...)

```
'SHOW COLUMNS FROM ' . $db_name . '.' . $table_name
```


----------



## MatMagic (25. Mai 2013)

'SHOW COLUMNS FROM ' . $db_name . '.' . $table_name
>> Parse error: syntax error, unexpected 'mysql_query' (T_STRING)

Ich habe schon var_dump ausgeben lassen - in den Variablen sind die richtigen Werte.

$table_name = termine1
$db_name = db471659069

Wenn ich diese Zeile nutze:

$result = mysql_query("SHOW COLUMNS FROM '$table_name' FROM '$db_name'");

bekomme ich diesen Fehler:

MySQL-Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''termine1' FROM 'db471659069'' at line 1

in dem man auch sehen kann das die Variablen richtig ankommen - nur der SQL Syntax ist noch falsch.


----------



## sheel (25. Mai 2013)

Parse error: syntax error, unexpected 'mysql_query' (T_STRING)
ist vermutlich ein Fehler vor der Abfrage, im PHP-Code

Das darunter ist keine var_dump-Ausgabe

Und FROM geht nicht einfach so zweimal


----------



## Cappaja (25. Mai 2013)

@sheel
Das doppelte FROM sollte laut 
http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
aber gehen...

You can use db_name.tbl_name as an alternative to the tbl_name FROM db_name syntax. In other words, these two statements are equivalent:

mysql> SHOW COLUMNS FROM mytable FROM mydb;
mysql> SHOW COLUMNS FROM mydb.mytable;

Aber vermutlich ist die Alternative versionsabhängig, das ist natürlich auch möglich.


----------



## MatMagic (25. Mai 2013)

```
$result = mysql_query("SHOW COLUMNS FROM db471659069.termine1");
```
funktioniert


```
$result = mysql_query("SHOW COLUMNS FROM $db_name.$table_name");
```
funktioniert nicht

mySQL Fehlermeldung:
*MySQL-Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1*

In den Variablen sind die richtigen Werte. Weiß einer weiter?


----------



## alxy (25. Mai 2013)

Biste sicher das die Werte richtig sind? keine Leerzeichen oder so zuviel? Und keine nicht druckbaren Zeichen wie Zeilenumbrücke oÄ


----------



## MatMagic (25. Mai 2013)

Puhhh, danke alxy! 

Es war tatsächlich ein "unsichtbarer" Zeilenumbruch im String den ich jetzt mit substr() entfernt habe. Mir ist beim var_dump nicht aufgefallen das dort 12 Zeichen angezeigt werden obwohl "termine1" ja nur 8 Zeichen hat.


```
$result = mysql_query("SHOW COLUMNS FROM $db_name.$table_name");
```

Jetzt klappt es auch mit dem Nachbarn...ähh mit dem Code.

Vielen Dank an alle für die Hilfe!


----------



## sheel (25. Mai 2013)

@matmagic: Jetzt weißt, warum ich die var_dump-Ausgaben sehen wollte 
@Cappaja: Danke für den Link, wieder was gelernt


----------

