Andreas Korthaus: Feld mit Primärschlüssel ermitteln (MYSQL/PHP)

Hallo!

Ist es möglich über PHP den Primärschlüssel einer MySQL Tabelle abzufragen?
Wenn ja - wie?

Grüße
Andreas

  1. Ist es möglich über PHP den Primärschlüssel einer MySQL Tabelle abzufragen?

    $query='SHOW KEYS FROM news';
    $result=mysql_query($query) or die(mysql_errno().': '.mysql_error());

    while($row=mysql_fetch_object($result)) {
      if($row->Key_name=='PRIMARY') {
        echo $row->Column_name,' is the primary key';
      }
    }

    1. Hi!

      Mal ne Frage, würde folgende Funktion funktionieren:

      function get_primary(){

      $query='SHOW KEYS FROM news';
      $result=mysql_query($query) or die(mysql_errno().': '.mysql_error());

      while($row=mysql_fetch_object($result)) {
        if($row->Key_name=='PRIMARY') {
         ### echo $row->Column_name,' is the primary key'; ###

      return $row->Column_name; // also einfach die Schleife hier abbrechen?

      }
      }

      }

      spricht was dagegen? Denn der Primärschlüssel steht meist in der 1. Spalte, da muß man ja nicht erst noch durch alle anderen durch, oder?

      Danke Dir, gibts evtl auch was Vergleichbrares, um Spaltentypen abzufragen? Ich suche nämlich den Namen der Spalte mit dem Typ TIMESTAMP!

      Viele Grüße
      Andreas

      1. Mal ne Frage, würde folgende Funktion funktionieren [...]

        Von mir aus. Entscheidend ist die korrekte query SHOW KEYS FROM table; Was Du mit dem result set machst, bleibt Dir überlassen.

        Ich suche nämlich den Namen der Spalte mit dem Typ TIMESTAMP!

        SHOW COLUMNS FROM table;

        Am besten, Du führst Dir http://www.mysql.com/doc/en/SHOW_DATABASE_INFO.html zu Gemüte.

        1. Hi!

          SHOW COLUMNS FROM table;

          Am besten, Du führst Dir http://www.mysql.com/doc/en/SHOW_DATABASE_INFO.html zu Gemüte.

          Danke Dir! Jetzt funtionierts, aber eine Frage hätte ich noch, ich habe das jetzt so gemacht:

          function get_timestamp_col_name($table){
              $result = query("SHOW COLUMNS FROM ".$table);
              while ($row = mysql_fetch_assoc($result)){
                  if($row["Type"] == "timestamp(14)"){
                      return $row["Field"];
                  }
              }
          }

          query() ist eine eigene Funktion

          meine Frage:
          da ich da sehr oft drauf zugreife und dadurch jede Millisekunde brauche, habe ich das ganze auf mysql_fetch_assoc umgetellt. Nur wenn ich das jetzt so mache, ist das langfristig zuverlässig nach "timestamp(14)" abzufragen? Man kann ja auch ein Objekt mit mysql_field_type zurückbekommen, nur dürfte das erheblich aufwendiger sein, wohl auch vom Programmieraufwand, wobei das halb so wild ist, aber vor allem vom Recourcenvrebrauch bei vielen Abfragen, oder?

          Grüße
          andreas