2016-08-31 2 views
-3

Ich bin der Anfänger von PHP & MySQL und ich übe über PHP & MySQL. Es ist verkabelt, dass nur der Feldname korrekt ist, aber andere. Ich kann nicht das erwartete Ergebnis aus dem Code erhalten. Wie erhalten Sie die richtigen Metadaten aus der Datenbank? The expected resultWeird Datenausgabe über PHP & MySQL

Actual result

<?php 
    // Open a connection to the server and USE the winestore 
     $link = mysqli_connect("localhost","root","","winestore"); 

     /* check connection */ 
     if (mysqli_connect_errno()) 
     { 
      printf("Connect failed: %s\n", mysqli_connect_error()); 
      exit(); 
     } 

     // Run a query on the wine table in the winestore database to retrieve 
     // one row 
     $query = "SELECT * FROM wine LIMIT 1"; 
     $result = mysqli_query($link, $query); 

     // Output a header, with headers spaced by padding 
     print "\n" . 
      str_pad("Field", 20) . 
      str_pad("Type", 14) . 
      str_pad("Null", 6) . 
      str_pad("Key", 5) . 
      str_pad("Extra", 12) . "\n"; 

     // How many attributes are there? 
     $x = mysqli_num_fields($result); 

     // for each of the attributes in the result set 
     for($y=0;$y<$x;$y++) 
     { 
      // Get the meta-data for the attribute 
      $info = mysqli_fetch_field ($result); 

      // Print the attribute name 
      print str_pad($info->name, 20); 

      // Print the data type 
      print str_pad($info->type, 6); 

      // Print the field length in brackets e.g.(2) 
      print str_pad("({$info->max_length})", 8); 

      // Print out YES if attribute can be NULL 
      if ($info->not_null != 1) 
       print " YES "; 
      else 
       print "  "; 

      // Print out selected index information 
      if ($info->primary_key == 1) 
      print " PRI "; 
      elseif ($info->multiple_key == 1) 
      print " MUL "; 
      elseif ($info->unique_key == 1) 
      print " UNI "; 

      // If zero-filled, print this 
      if ($info->zerofill) 
      print " Zero filled"; 

      // Start a new line 
      print "\n"; 
     } 
     mysqli_free_result($result); 
     mysqli_close($link); 
    ?> 
+0

'str_pad'? Warum nicht einfach eine Tabelle? – Ghost

+0

check '$ info' jede Iteration und sehen was passiert – Ghost

Antwort

0

Gemäß der Abfrage das erwartete Ergebnis ist das Detail der Strukturtabelle und für diese eine kann mysql verwenden Abfrage Beschreiben Tabelle liefert, die die Struktur der Tabelle .

+0

Bitte fügen Sie auch eine Erklärung zu Ihrem Code als auch? –

+0

Nach der Abfrage ist das erwartete Ergebnis das Detail der Tabellenstruktur und dafür kann man ** mysql Describe Tabellenabfrage ** verwenden, die die ** Struktur ** der Tabelle liefert. – PBajpai

+0

Bitte bearbeiten Sie Ihre Antwort und fügen Sie diese Informationen zur Antwort hinzu. Leute können keine Kommentare lesen. :) –

0

können Sie folgenden Code versuchen.Ich denke, es wird Ihnen helfen.

<?php 
error_reporting(0); 
$conn = mysqli_connect('localhost', 'root', ''); 
if (!$conn) { 
die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db('winestore'); 
$result = mysql_query('SELECT * FROM wine LIMIT 0,1'); 

if (!$result) { 
die('Query failed: ' . mysql_error()); 
} 
?> 

<table> 
<th>Field</th> 
<th>Type</th> 
<th>Null</th> 
<th>Key</th> 
<th>Extra</th> 
<?php 
/* get column metadata */ 
$i = 0; 
while ($i < mysql_num_fields($result)) { 
$meta = mysql_fetch_field($result, $i); 
if (!$meta) { 
    echo "No information available<br />\n"; 
} 
$i++; 
?> 
<tr> 
    <td><?php echo $meta->name;?></td> 
    <td><?php echo $meta->type."(".$meta->max_length.")";?></td> 
    <td><?php if($meta->not_null==1){echo 'NO';}else{echo 'YES';}?></td> 
    <td><?php if($meta->multiple_key==1){ echo 'MUL';}if($meta->primary_key==1){echo 'PRI';}?></td> 
    <td><?php echo $meta->not_null;?></td> 
</tr> 
<?php 
} 
mysql_free_result($result); 
?> 

, wenn Sie irgendwelche Zweifel mehr zu diesem Thema haben, besuchen Sie bitte diesen Link http://php.net/manual/en/function.mysql-fetch-field.php