मुझे इस कोड में टाइप वार्तालाप में कुछ समस्या है (फेसबुक PHP एसडीके 3.0.1 के साथ काम करना):

$page_id = 192485754113829;
$post_limit = 2;

$query = "select post_id, source_id, actor_id, target_id, created_time, likes, message, attachment, comments from stream where source_id = '.$page_id.' LIMIT '.$post_limit.'";

पार्सर त्रुटि: अनपेक्षित '।' 130 की स्थिति में।

मैं समझा नहीं सकता, कि यह कोड अलग-अलग होस्टिंग पर एक ही तरह से काम नहीं करता है। क्या php.ini में कुछ प्रकार की सेटिंग्स हैं?

0
Sergey 27 जुलाई 2011, 13:02

6 जवाब

सबसे बढ़िया उत्तर
$query = "select post_id, source_id, actor_id, target_id,
created_time, likes, message, attachment, comments
from stream where source_id = '$page_id' LIMIT $post_limit ";

काम करेगा।

या यदि आप संयोजन का उपयोग करना चाहते हैं:

$query = "select post_id, source_id, actor_id, target_id,
created_time, likes, message, attachment, comments
from stream where source_id =  ".$page_id." LIMIT ".$post_limit;
4
DhruvPathak 27 जुलाई 2011, 13:04
$query = "select post_id, source_id, actor_id, target_id, created_time, likes, message, attachment, comments from stream where source_id = '$page_id' LIMIT $post_limit";

या

$query = "select post_id, source_id, actor_id, target_id, created_time, likes, message, attachment, comments from stream where source_id = '".$page_id."' LIMIT ".$post_limit."";

(यदि page_id एक पूर्णांक है तो आप इसे बिना किसी उद्धरण के लिख सकते हैं)

समस्या उद्धरण में है।

1
k102 27 जुलाई 2011, 13:04

इसका टाइप-रूपांतरण से कोई लेना-देना नहीं है, यह सिर्फ आपके उद्धरण हैं जो गलत हैं। कोड इस तरह दिखना चाहिए:

$page_id = 192485754113829;
$post_limit = 2;

$query = "select post_id, source_id, actor_id, target_id, created_time, likes, message, attachment, comments from stream where source_id = ".$page_id." LIMIT ".$post_limit."";
1
technology 27 जुलाई 2011, 13:05

यह एक सिंटैक्स त्रुटि है। यह किसी भी होस्ट पर काम नहीं करेगा।

0
troelskn 27 जुलाई 2011, 13:05

आपको लगता है कि आप स्ट्रिंग कॉन्सटेनेशन करते हैं, लेकिन आप नहीं करते हैं। डॉट्स डबल कोटेड स्ट्रिंग के अंदर हैं और इसलिए इसका कोई विशेष अर्थ नहीं है। वे SQL कथन में मान्य नहीं हैं।

चूंकि वेरिएबल्स को डबल कोटेड स्ट्रिंग्स में पार्स किया जाता है, आप यह कर सकते हैं:

"select (...) where source_id = $page_id LIMIT $post_limit";

यदि आप स्ट्रिंग कॉन्सटेनेशन का उपयोग करना चाहते हैं, तो आपने स्ट्रिंग को ठीक से समाप्त कर दिया है:

'select (...) where source_id = ' . $page_id . ' LIMIT ' . $post_limit;

स्ट्रिंग्स के बारे में और पढ़ें।

0
Felix Kling 27 जुलाई 2011, 13:06

आप मूल रूप से इस क्वेरी को उत्पन्न कर रहे हैं (मैंने इसे बेहतर प्रदर्शन के लिए पुन: स्वरूपित किया है):

select post_id, source_id, actor_id, target_id, created_time, likes,
    message, attachment, comments
from stream
where source_id = '.1.9248575411383E+14.' LIMIT '.2.'

यह किसी भी तरह से मान्य SQL नहीं है। आरंभ करने के लिए, आपको अतिरिक्त बिंदुओं से छुटकारा पाना होगा।

आपके अमान्य SQL के अलावा, 192485754113829 बहुत बड़ा पूर्णांक है। पूर्णांक का अधिकतम आकार प्लेटफॉर्म पर निर्भर करता है लेकिन मेरे कंप्यूटर में सीमा 2^32 है जो आपकी संख्या से छोटी है। इसका मतलब है कि PHP इसे फ्लोटिंग पॉइंट नंबर के रूप में हैंडल करेगा और आप सटीकता खो देंगे। यह देखते हुए कि यह एक आईडी है, मेरा सुझाव है कि आप इसके बजाय PHP स्ट्रिंग्स का उपयोग करें।

0
Álvaro González 27 जुलाई 2011, 13:18