2011-04-10 9 views
7

है, तो मेरे पास केकपीएचपी में सामान्य क्वेरी-कॉल होने के बारे में लगता है - यह सभी परिणामों के लिए काम करता है, लेकिन जब किसी फ़ील्ड में एक विशेष चरित्र होता है, तो क्षेत्र खाली हो जाएगा। यह तोड़ता नहीं है - और यह अभी भी मुझे बाकी के खेतों को देता है - यह सिर्फ एक फ़ील्ड है जो खाली है।केकपीएचपी - क्वेरी खाली फ़ील्ड लौटाती है यदि इसमें

उदाहरण:

$this->paginate = array(
'conditions' => array(
    'Item.name != ' => '', 
), 
); 
$data = $this->paginate('Item'); 

यह सब (एक है कि मैंने सोचा था कि एक खाली नाम क्षेत्र था सहित) मेरी तालिका के आइटम वापस आ जाएगी - लेकिन जब मैं पृष्ठ पर नाम प्रतिध्वनित करने के लिए प्रयास करते हैं, यह काम करता है एक विशेष चरित्र (é) के साथ एक को छोड़कर हर आइटम के लिए। मैंने इसे सामान्य "ई" में बदल दिया और यह ठीक दिखता है।

यदि वे उनके नाम पर एक विशेष चरित्र रखते हैं तो भी मैं परिणाम कैसे वापस कर सकता हूं? अग्रिम में धन्यवाद! आप कुछ एन्कोडिंग बेमेल है, तो

class DATABASE_CONFIG { 
    public $default = array(
     ... 
     'encoding' => 'utf8' 
    ); 
} 

,:

+2

तालिका का एन्कोडिंग क्या है? साथ ही, जब आप क्वेरी को मैन्युअल रूप से चलाते हैं तो क्या होता है, क्या यह दिखाता है? और जांचें कि फ़ील्ड वास्तव में – JohnP

+0

@JohnP पर 'var_dump() 'चलाकर पॉप्युलेट किया गया है - मुझे एन्कोडिंग के बारे में निश्चित नहीं है, लेकिन जब मैं मैन्युअल रूप से क्वेरी चलाता हूं (सॉफ़्टवेयर में या नियमित PHP के माध्यम से), यह दिखाता है बस ठीक। – Dave

+0

@ डेव आपको यह पुष्टि करने की आवश्यकता होगी कि केक डेटा पर किसी भी फ़िल्टरिंग को चला रहा है या नहीं। एक var_dump() या डीबग() चलाएं और देखें कि डेटा वास्तव में सरणी में मौजूद है या नहीं दिख रहा है।आप डीबी के संयोजन को utf_8 के साथ-साथ HTML – JohnP

उत्तर

8

चेक सुनिश्चित करें कि आपके डेटाबेस (UTF-8 आदर्श) सही एन्कोडिंग का उपयोग करता बनाने के लिए और आप config/database.php में रूप में अच्छी तरह यह एक ही एन्कोडिंग का उपयोग करना केक कॉन्फ़िगर किया है आपके ऐप ने पहले ही डेटाबेस में कचरा संग्रहीत किया है, इसलिए सुनिश्चित करें कि आप सही डेटा और/या एक ताजा डेटाबेस के साथ परीक्षण करें।

+0

क्या यूटीएफ -8 मुझे विशेष पात्रों जैसे उमलॉट-पत्र ... आदि रखने की अनुमति देगा? – Dave

+0

प्लस - डेटाबेस में सामग्री ठीक दिखती है - इसमें विशेष वर्ण सही हैं और सबकुछ – Dave

+0

हां, यूटीएफ -8 आपको लगभग किसी भी मानव चरित्र को सही तरीके से स्टोर और संभालने की अनुमति देता है। आप अपने डेटाबेस की सामग्री की पुष्टि कैसे कर रहे हैं? आप वास्तव में कचरे को दो बार गलत तरीके से संभालने में देख सकते हैं, जो इसे सही तरीके से प्रदर्शित करेगा। – deceze

0

यह शायद केक-विशिष्ट समस्या और PHP/MySQL समस्या से अधिक है। (दूसरों को पहले से ही एन्कोडिंग लाया है, इसलिए मुझे लगता है कि छोड़ देंगे।)

एकल उद्धरण चिह्न एक शाब्दिक स्ट्रिंग MySQL करने के लिए सौंप दिया जा रहा है मतलब है: 'Item.name != ' => ''

पीएचपी (एक ला केक) शायद उस स्ट्रिंग पार्स काफी सचमुच। वास्तव में, यह भी इसे पसंद को पार्स किया जा सकता है है:

"Item.name != " 

(?! ध्यान दें संकार्य के बाद कोई बात नहीं है और अगर यह SQL क्वेरी में पिछले गिर जाता है, क्वेरी त्रुटि नहीं होता, यह शायद अभी भी काम करेगा)

आप परीक्षण करने के लिए यह के लिए जब:

"Item.name != ''" 

(खाली ध्यान दें एकल उद्धरण अब स्ट्रिंग में शामिल है)

हालांकि, बाद से आपको कोई त्रुटि नहीं मिल रहे हैं - और के बाकीडेटा खींचता है! - शायद आप उस कथन को संपादित करना चाहते हैं, क्योंकि आपकी समस्या सिंटैक्स की अधिक संभावना है।

'Item.name IS NOT NULL' 
'Item.name <> ' => '' 
'Item.name IS NOT' => '' 

उनको आज़माएं।

http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html वर्णन नहीं करता है कि नल बनाम नहीं है (बूल) बनाम <> और! = (बराबर नहीं है)।

एचटीएच :)

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