PHP DB-Abfrage ohne angabe der Tabelle

frogg06

Mitglied
Ich möchte mit einem Script eine Datenbank durchsuchen durchsuchen ohne angabe der Spalte in der Tabelle. welche möglichtkeiten gibt es noch ohne manuelle nacheinander die Spalten abzufragen.

Danke
 
Indem du zuerst eine MySQL Query machst:
SQL:
SHOW TABLES [LIKE 'wi_%'];
(das in der Klammer ist Optional wenn du prefixxe bei deinen Tables verwendest und nur ein Projekt erwischen willst)

Dannach machst du ein DESC Befehl auf jede einzelne Table, also DESC `test_table` Als ergebniss bekommst du alle Felder zurück die die MySQL Tabelle hat. Dann baust du dir eine query zusammen in für jedes Feld etwas zusammenbaut alle `FELD` LIKE '%$suche%' ' Alle hintereinanderhängen und mit OR verknüpfen.

Einen einfacheren Weg wird es wohl nicht geben.
 
Zuletzt bearbeitet von einem Moderator:
PHP:
$table = mysql_query('SHOW TABLES');
mysql_error();
echo $table;

ergibt eine resource_id aber wie bekomme ich daraus jetzt die Tabellennamen
 
Zuletzt bearbeitet:
Du musst mit mysql_fetch_row() noch die Daten auslesen

PHP:
<?
$SEARCH = 'Fisch';


$sql = "SHOW TABLES";
$res = mysql_query($sql);
while ($row = mysql_fetch_row($res)) {
	$search_query = "SELECT * FROM $row[0] WHERE ";
    
    $sql2 = "DESC `$row[0]`";
	$res2 = mysql_query($sql2);
	while ($row2 = mysql_fetch_row($res2)) {
		$search_query .= "\n`$row2[0]` = '%$SEARCH%' OR";
	}
	$search_query = substr($search_query,0,-2);
	echo $search_query;
}
?>
 
Dankeschön war eine gute Anregung.Ich hatte vergessen das der Tabellenname ja feststeht.Meine Lösung sieht so aus:
PHP:
$sql = "SELECT * FROM ITBV";

$result = mysql_query ( $sql );

$menge = mysql_num_fields ( $result );

for ( $x = 0; $x < $menge; $x++ )
{
  $field= mysql_field_name ( $result, $x );
  $select = mysql_query("select * from ITBV where '".field."'='".$search."'");
  $row=mysql_fetch_assoc($select);
}
 
Ein paar kleine Modifikationen... ,)

In erster Linie eine Query abschicken statt pro Colum eine eigene.

PHP:
<?
$sql    = "SELECT * FROM ITBV LIMIT 1"; // Zur beschleunigung der Abfrage LIMIT 1
$result = mysql_query ( $sql );
$row    = mysql_fetch_assoc($result);

// Anfang der Query
$select = "select * from ITBV where ";
foreach ($row as $field => $val){
    // Je Feld ein Statement hinzufügen
    $select .= "`$key` LIKE '%$search%' OR";
} 
// Query zur suche nach vorkommen abschicken, das letzte OR entfernen
$res = mysql_query(substr($select,0,-2));
echo mysql_num_rows($res). ' Vorkommen gefunden';
?>
 
Leider bringt mir die immer den Fehler:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in X:\xampp\htdocs\array.php on line 38
und es wird immer angezeigt das die die Sucher erfolgreich war ;o( obwohl das nicht immer sein konnte
 
Lass mal die Query die entsteht mit
PHP:
echo substr($select,0,-2);
ausgeben, vielleicht findet sich dann der Fehler der an der 2. Query nicht stimmt.

Und einen Fehler hab ich schon meinerseits gesehen...

PHP:
<?
$sql    = "SELECT * FROM ITBV LIMIT 1"; // Zur beschleunigung der Abfrage LIMIT 1
$result = mysql_query ( $sql );
$row    = mysql_fetch_assoc($result);

// Anfang der Query
$select = "select * from ITBV where ";
foreach ($row as $field => $val){
    // Je Feld ein Statement hinzufügen
    $select .= "`$field` LIKE '%$search%' OR";  // hier stand die Variable $key (undefined) statt der $field die hier eignetlich hingehörte
} 
// Query zur suche nach vorkommen abschicken, das letzte OR entfernen
$res = mysql_query(substr($select,0,-2));
echo mysql_num_rows($res). ' Vorkommen gefunden';
?>
 
PHP:
echo substr($select,0,-2);
liefert die query richtig
0 Vorkommen gefunden
PHP:
select * from ITBV where `o_id` = 'PC P4' OR`DNR` = 'PC P4' OR`TENR` = 'PC P4' OR`ZENR` = 'PC P4' OR`BEN` = 'PC P4' OR`SERIENNR` = 'PC P4' OR`RAUMNR` = 'PC P4' OR`OBJEKTKLAS` = 'PC P4' OR`SATZBEZEIC` = 'PC P4' OR`HERSTELLER` = 'PC P4' OR`TYP_MODELL` = 'PC P4' OR`SATZVERSOR` = 'PC P4' OR`OBJEKT_ID` = 'PC P4' OR`GEB_HAUSNR` = 'PC P4' OR`DSTKURZBEZ` = 'PC P4' OR`SORTIERKLASSE` = 'PC P4'
das ganze sollte jetzt das ganze noch durch ne do while schleife laufen und dann gehen oder
 
Zuletzt bearbeitet:
Die eigenen Gedanken sind oft das größte Hinderniss ..danke es Funkt ;o) die Komplette Lösung werde ich gleich noch Posten
 
Zuletzt bearbeitet:
Zurück