[PHP] Filtrare nomi tabelle DB

solari77

Utente Attivo
6 Ott 2016
119
1
18
Ciao a tutti,avrei bisogno del vostro aiuto .
Su una pagina PHP tramite il comando
SHOW TABLE STATUS FROM nome_database
Ottengo tutti i nomi delle tabelle del mio database.
Io dovrei filtrare solo alcuni di questi , è per essere più preciso,solo i nomi delle tabelle che hanno un determinato campo.

Es .
Tabella1->id,nome,cognome
Tabella2->campo1,campo2
Tabella3->campo3,campo4
Tabella4->id,ecc

Io dovrei ottenere solo i nomi delle tabelle che contengono il campo id,quindi dovrei ottenere Tabella1 e Tabella4

È possibile farlo?
Grazie
 
Ciao.

Questo dovrebbe fare al caso tuo.

index.php
PHP:
<?php

function cerca_campo_db(PDO $conn, $db, $colonna) {
    $query = "SELECT *
        FROM information_schema.COLUMNS
        WHERE TABLE_SCHEMA = ?
        AND COLUMN_NAME = ?";

    $stm = $conn->prepare($query);
    $stm->execute(array($db,$colonna));

    $tabelle = array();
    while ($row = $stm->fetch(PDO::FETCH_ASSOC)) {
        $tabelle[] = $row['TABLE_NAME'];
    }

    echo count($tabelle)." tabelle del db ".$db." contengono il campo ".$colonna.":<br><br>";
    foreach ($tabelle as $key => $value) {
        echo ($key+1).". ".$value."<br>";
    }
}

include_once("db.php");

$db = "shop"; // nome del db ---> MODIFICARE
$colonna = "meta_key"; // colonna ricercata ---> MODIFICARE

cerca_campo_db($conn,$db,$colonna);

 ?>


È necessario anche un file di accesso al db.

db.php
PHP:
<?php

$hostname='localhost';
$username='root';
$password='';
$db="test";

try {
    $conn = new PDO("mysql:host=$hostname;dbname=".$db.";charset=utf8",$username,$password);

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo $e->getMessage();
}

?>
Qui ovviamente dovrai modificare i parametri di connessione al db, nel caso siano diversi.
 
  • Like
Reactions: solari77
Ciao,ho provato ma non va.
Sul file index.php ho modificato il nome del db ed il nome della colonna.
Sul file db.php ho modificato i parametri di connessione però ottengo sempre il messaggio
0 tabelle del db mio_db contengono il campo mia_colonna
 
non conosco mySql, ma "guardando in giro" ho trovato questa select, provala, semplifica molto
PHP:
SELECT DISTINCT TABLE_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('columnA','ColumnB')
        AND TABLE_SCHEMA='YourDatabase'

volendo aggiungere,

ORDER BY TABLE_NAME
 
  • Like
Reactions: solari77
Ciao @marino51 ,questa select funziona. O meglio da PhpMyAdmin ottengo la tabella con i nomi esattamente come voglio io.
Ora però ho un'altro piccolo problema.
Io prima avevo
Codice:
$nomtab=" come mi hai indicato tu......";
 $table = mysqli_query($conn,$nomtab);
    while ($rs = mysqli_fetch_assoc($table))
    {.......
 echo $rs['TABLE_NAME'];
.........}

Però adesso la fetch_row non mi da nulla. Dove sbaglio ?
 
Ultima modifica:
Ho notato una cosa strana, in locale funziona tutto regolarmente, in remoto invece che non stampa i nomi delle tabelle
 
Scusate,ho commesso un gravissimo errore.Sulla query non avevo cambiato il nome del database.o_Oo_O
Funziona tutto perfettamente
Grazie
 

Discussioni simili