2012-07-11 11 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

"वर्णन 'table_name'" क्वेरी चलाएं? – Waygood

+0

अच्छा बिंदु, जिसके लिए डीबी के साथ एक अलग लेनदेन की आवश्यकता होगी, जो करने योग्य है। मैं परिणाम सेट में पहले से प्राप्त जानकारी का उपयोग करना पसंद करता हूं। –

उत्तर

7

आप बहुत करीब थे, तो आप flags संपत्ति की आवश्यकता होगी:

संपादित यहाँ कुछ काम कर कोड है।

झंडा आप देख रहे हैं MYSQLI_PRI_KEY_FLAG, जिसका अर्थ है है:

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

फील्ड एक प्राथमिक सूचकांक

आप की तरह कुछ के साथ इस ध्वज के लिए परीक्षण कर सकते हैं का हिस्सा है

आप & का उपयोग कर रहे हैं Bitwise AND Operator के रूप में।

संबंधित मुद्दे