2012-07-11 79 views
8

我將我的一些代碼從舊的mysql擴展轉換爲PHP中的mysqli擴展。此前,有mysql擴展,我用了一些這樣的代碼,以找到一個表的主鍵:如何判斷列是否是使用mysqli的主鍵?

while ($i < mysql_num_fields($result)) { 
    $meta = mysql_fetch_field($result, $i); 
    if ($meta->primary_key == 1){ 
     $primary_key = $meta->name; 
    } 
    $i++; 
} 

$meta->primary_key == 1是非常方便的。

到目前爲止,我已經轉換爲代碼使用的mysqli:

while ($i < $result->field_count) { 
    $meta = $result->fetch_field; 
    if ($meta->primary_key == 1){ 
     $primary_key = $meta->name; 
    } 
    $i++; 
} 

當然,從看文檔here我們可以看到,$meta->primary_key不存在mysqli的。我看到有一個$meta->flags。這是我最好的猜測,雖然我不確定當我有主鍵時flags應該是什麼值。

有誰知道我該如何判斷哪一列是使用mysqli的表的主鍵?

謝謝!

編輯 下面是一些工作代碼:

//get primary key 
$primary_key = ''; 
while ($meta = $result->fetch_field()) { 
    if ($meta->flags & MYSQLI_PRI_KEY_FLAG) { 
     $primary_key = $meta->name; 
    } 
} 
+2

運行「describe'table_name'」查詢? – Waygood 2012-07-11 14:48:10

+0

好點,這將需要與數據庫的單獨交易,這是可行的。我更喜歡使用已經在結果集中獲得的信息。 – 2012-07-11 14:58:11

回答

7

你非常接近,你將需要flags財產。

你正在尋找的標誌是MYSQLI_PRI_KEY_FLAG,這意味着:

字段是主索引

你可以像測試這個標誌的一部分:

if ($meta->flags & MYSQLI_PRI_KEY_FLAG) { 
    //it is a primary key! 
} 

您在此處使用&作爲Bitwise AND Operator