Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    10

    mysqli e metadati primary key.

    Ciao

    Stavo scrivendo alcune funzioni parametriche per l'accesso a database MySQL. Avrei necessità di individuare la chiave primaria mentre scorro i vari campi. Fra le opzioni disponibili in mysqli_fetch_fields non sembra esserci nulla che aiuti in questo. Tramite mysqli come si può individuare se un certo campo è di tipo Chiave Primaria?

    Grazie anticipatamente!

    Ciao!

  2. #2
    per far una roba simile dovresti accedere in lettura al DB information_schema, che contiene i dettagli delle diverse tabelle:

    fai un bel: SELECT * FROM information_schema.`COLUMNS` WHERE information_schema.`COLUMNS`.COLUMN_KEY LIKE 'PRI' ed ottieni tutte i campi di tutte le tabelle con PRIMARY KEY.

    Se aggiungi AND information_schema.`COLUMNS`.TABLE_NAME LIKE 'TuaTabella' AND information_schema.`COLUMNS`.TABLE_SCHEMA LIKE 'TuoDatabase'

    Ottieni il campo PK della tabella che ti serve.

    N.B. Questo funzione per MySQL 5.1 (e credo anche per la 5.0), ma non so in quale versione hanno inserito questi nomi, può darsi che in versioni precedenti usassero un DB e/o una tabella e/o un campo diversi

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    10
    Articolato ma ci provo Eppure nella libreria mysql (non mysqli) c'era la voce primary_key per l'oggetto restituito da mysql_fetch_field. Non l'ho mai provato e non ho modo di provarlo ora ma mi sembra strano che non esista nella mysqli una cosa del genere...

    Intanto provo quanto consigliato, grazie

    CIao!

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    10
    Ciao!

    L'informazione sulla chiave primaria si può ottenere anche con una SHOW KEYS, tipo così ($this->connection è la risorsa connessione al DB che è sempre la stessa grazie all'adozione del pattern singleton...);

    Codice PHP:
        function get_primary_key($table) {
          
    $pk "";
          
    $sql "SHOW KEYS FROM ".$table;
          echo 
    $sql;
          
    $res mysqli_query($this->connection$sql) or die(mysqli_error($this->connection));
          while (
    $row mysqli_fetch_assoc($res)) {
              if (
    $row['Key_name']=='PRIMARY')
                
    $pk $row['Column_name'];
          }
          
          return 
    $pk;
        } 
    Il fatto è che il mio "problema" è più complesso e mi servirebbe qualcosa di "contestuale". Mi spiego: immagina di voler eseguire una Stored Procedure di cui, a priori, non conosci la forma e quindi non sai su quali tabelle lavora.
    L'esecuzione della Stored Procedure crea, contestualmente, una tabella con delle radiobutton o similari a cui vuoi associare come valore la chiave della tabella visualizzata o comunque , in generale, della tabella "madre" coinvolta in join all'interno della SP.
    Quindi la "forzatura" sta nel fatto che: finchè non esegui la SP non conosci il nome della tabella, ma PRIMA di eseguire la SP vorresti sapere qual'è la chiave primaria ma, quindi, non hai il nome della tabella e non puoi eseguire la SHOW!! Ovviamente non puoi eseguire get_primary_key contestualmente all'esecuzione dell'SP poichè ritorna un errore di sync (durante l'esecuzione di una query ne vuoi fare un'altra...).
    E' un po' contorta come cosa Idem se si esegue una query all'information_schema. Hummm...E' per questo che cercavo qualcosa di contestuale, cioè mentre eseguo la SP recupero i metadati tipo:

    Codice PHP:
    ...
    $fields mysqli_fetch_fields($rows);
    $name_tab $fields->orgname;
    //etc...Si sperava di poter individuare qui la chiave primaria...forse tramite i FLAGS si può? 
    dalla/e tabella/e conivolta/e e mi salvo l'informazione sul nome della chiave. Altrimenti, se non si potesse fare in modo diretto si può "ritardare" il recupero dell'informazione: al radiobutton si associa il nome della tabella (si ha senza problemi durante l'esecuzione della SP) e poi quando si processa il form contenente il radiobutton si esegue la SHOW, si recupera la chiave e si esegue ciò che si deve eseguire...farò così

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.