2012-10-25 10 views
5

एसक्यूएल इन क्लॉज के लिए, PHP ओसीआई 8 के साथ एसक्यूएल बाध्य करते समय मैं अज्ञात संख्याओं को कैसे संभाल सकता हूं?PHP में ओसीआई 8 बाइंड (अज्ञात संख्या) पैरामीटर 'आईएन' कथन

उदाहरण के लिए

, निम्न क्वेरी

और चर की सरणी

$bind_array = array(
    ':id_1' => '1', 
    ': id_array_of_unknown_size' => array('7','2','5',), 
); 

बाध्य करने के लिए इसके अलावा अपने नोट करने के लिए है कि मेरे विशेष स्थिति में महत्वपूर्ण इनपुट array($bind_array) या शामिल नहीं हो सकता है को देखते हुए बाध्य तत्व के लिए एक उप-सरणी। oci_bind_array_by_name

http://php.net/manual/en/function.oci-bind-array-by-name - यह बस के रूप में अच्छी तरह से निम्नलिखित

select * from table1 
where id > :id_1 
and id != :id_2 

और

$bind_array = array(
    ':id_1' => '1', 
    ':id_2' => '5', 
); 
+1

क्या आप ओसीआई में प्रवेश कर सकते हैं? मुझे लगता है कि पीडीओ में आप इनके साथ बाध्य नहीं हो सकते हैं – JvdBerg

उत्तर

0

यदि आप किसी अन्य समारोह के साथ एक सरणी के लिए बाध्य करना चाहिए हो सकता है।

तुम सिर्फ की जगह नहीं कर सकते: oci_bind_by_name http://php.net/manual/en/function.oci-bind-by-name.php

2

एक ही रास्ता द्वारा सरणी वस्तुओं के साथ चर एक में खंड में मूल्यों का एक छोटा सा निश्चित संख्या के बंधन oci_bind_by_name की डॉक्स में वर्णित की तरह है। मूल्यों की परिवर्तनीय संख्या के साथ कई स्थितियों को बांधने का एक समाधान भी है।

<?php 
$ids = array(
    103, 
    104 
); 

$conn   = oci_pconnect($user, $pass, $tns); 
// Using ORACLE table() function to get the ids from the subquery 
$sql   = 'SELECT * FROM employees WHERE employee_id IN (SELECT column_value FROM table(:ids))'; 
$stmt   = oci_parse($conn, $sql); 
// Create collection of numbers. Build in type for strings is ODCIVARCHAR2LIST, but you can also create own types. 
$idCollection = oci_new_collection($conn, 'ODCINUMBERLIST', 'SYS'); 

// Maximum length of collections of type ODCINUMBERLIST is 32767, maybe you should check that! 
foreach ($ids as $id) { 
    $idCollection->append($id); 
} 

oci_bind_by_name($stmt, ':ids', $idCollection, -1, SQLT_NTY); 
oci_execute($stmt, OCI_DEFAULT); 
oci_fetch_all($stmt, $return); 
oci_free_statement($stmt); 

oci_close($conn); 

?>