2016-08-31 55 views
-3

我是PHP的初學者& MySQL和我正在練習關於PHP & MySQL。有線只有字段名稱是正確的,但其他人。我無法從代碼中獲得預期的結果。 如何從數據庫中獲取正確的元數據? The expected result奇怪的數據輸出關於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'?爲什麼不只是一張表 – Ghost

+0

每次迭代都檢查'$ info',看看發生了什麼 – Ghost

回答

0

按照該查詢的預期的結果是表結構的細節和爲一個可以使用MySQL 描述表查詢,這將提供的表的結構

<?php 
    $con = mysqli_connect(HOST,USER,PASSWORD,DATABASE NAME); 
    $data = mysqli_query($con,"DESCRIBE tablename"); 
?> 
<table> 
    <tr> 
     <td>Field</td> 
     <td>Type</td> 
     <td>Null</td> 
     <td>Key</td> 
     <td>Default</td> 
     <td>Extra</td> 
    </tr> 
<?php while($row=mysqli_fetch_array($data,MYSQLI_ASSOC)){ ?> 
    <tr> 
     <td><?php echo $row['Field']; ?></td> 
     <td><?php echo $row['Type']; ?></td> 
     <td><?php echo $row['Null']; ?></td> 
     <td><?php echo $row['Key']; ?></td> 
     <td><?php echo $row['Default']; ?></td> 
     <td><?php echo $row['Extra']; ?></td> 
    </tr> 
<?php } ?> 
</table> 
+0

請給你的代碼添加一些解釋? –

+0

根據查詢,預期結果是表結構的細節,並且可以使用** mysql描述表格查詢**,它將提供表格的**結構**。 – PBajpai

+0

請編輯您的答案並將此信息添加到答案中。人們可能不會閱讀評論。 :) –

0

你可以嘗試下面的代碼。我認爲它會幫助你。

<?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); 
?> 

,如果你有關於這個問題的任何更多疑問,請訪問以下鏈接http://php.net/manual/en/function.mysql-fetch-field.php