2009-09-09 5 views
6

पर प्रोपेल मानदंड संकलित करने के लिए कैसे करें मैं एसक्यूएल को साफ़ करने के लिए प्रोपेल मानदंड कैसे संकलित कर सकता हूं? मैंने $ मानदंड-> toString() की कोशिश की है; लेकिन मुझे उम्मीद नहीं है। इसके अलावा, मैं कोशिश की है ModelPeer :: doSelectStmt ($ मापदंड) लेकिन यह कच्चे एसक्यूएल (आवश्यक पैरामीटर प्रतिस्थापन)एसक्यूएल

उत्तर

2

लौटे मेरा मानना ​​है कि इस तरह से

$rawSql = BasePeer::createSelectSql($criteria, $params); 
+0

जैसा कि मैंने पहले कहा कि मैं स्पष्ट एसक्यूएल, प्राप्त करना चाहते हैं कच्चे नहीं (जैसे कि "चयन लेख से जहां नाम =: p1") मुझे लगता है कि प्रोपेल ऐसी सुविधा प्रदान करता है .. –

+0

उस $ rawSql में मुझे पैरामीटर को प्रतिस्थापित करना होगा: पी 1,: पी 2, आदि लेकिन इस तरह से मुझे पहले ही लिखित कोड –

+0

लिखना होगा, यही पैराम्स सरणी है। मुझे लगता है कि मैंने यह स्पष्ट नहीं किया - अपने पैरा को एक सहयोगी सरणी के रूप में आपूर्ति करें। –

12

सबसे पहले है, यह नोट करना महत्वपूर्ण है कि प्रस्तावित बयानों के साथ पीडीओ का उपयोग करें, इसलिए आपको PHP में पूरी तरह से "अंतर्निर्मित" SQL कथन प्राप्त नहीं होगा। मानदंड का उपयोग करना-> toString() एक अच्छी शुरुआत है, लेकिन जैसा कि पीटर का उल्लेख है कि वास्तव में बेसपीयर :: createSelectSql() विधि द्वारा किया गया है।

यहाँ सबसे पूर्ण रास्ता (प्रोपेल से) क्या एसक्यूएल (प्लेसहोल्डर के साथ) की तरह दिखाई देगा देखने के लिए और पैरामीटर में प्रतिस्थापित किया जाएगा:

$params = array(); // This will be filled with the parameters 
$sql = BasePeer::createSelectSql($criteria, $params); 

print "The raw SQL: " . $sql . "\n"; 
print "The parameters: " . print_r($params, true) . "\n"; 

ध्यान दें कि आप अभी से बेहतर माइलेज प्राप्त हो सकता है डेटाबेस स्तर पर क्वेरी लॉगिंग। बेशक, अगर देशी डीबी तैयार कथन का उपयोग करने के लिए पीडीओ कॉन्फ़िगर किया गया है (या समर्थन करता है), तो आप अभी भी डीबी में प्लेसहोल्डर देख सकते हैं।

+0

मैंने एक 'वर्डव्रैप ($ sql) 'जोड़ा है, इसलिए वास्तव में लंबे समय तक एसक्यूएल पृष्ठ पर फिट हो सकता है। मैं कुछ प्रोपेल प्रश्नों को वापस पीडीओ में परिवर्तित कर रहा था और यह एक आकर्षण की तरह काम करता था। धन्यवाद @ हंस एल। –

0

मैंने चारों ओर काम करने का फैसला किया। असल में मुझे इंसर्ट की आवश्यकता थी ... चुनें। I.e - क्रिटिरिया के माध्यम से कथन चुनें, INSERT में और निष्पादित करें।
इसलिए मैंने बेसपीयर से कच्चे एसक्यूएल (बेसपीयर :: createSelectSql) बनाने के लिए कहा, फिर INSERT में शामिल किया गया। चूंकि मुझे पॉप्युलेट कथन के मूल्यों की आवश्यकता है (: पी 1,: पी 2, आदि), लेकिन विधि बेसपीयर :: populateStmtValues ​​ निजी है (क्यों?) मुझे उस विधि को किसी अन्य स्थान पर कॉपी करना होगा और उसे कॉल करना होगा।

0

भी आसान कोशिश:

print($criteria->toString()) ;