आपको MySQL प्रश्नों को विकसित करना और उन्हें पहले PHP कोड के संदर्भ के बाहर परिपूर्ण करना महत्वपूर्ण है, फिर क्वेरी को एकीकृत करने के बाद जब आप इसे एक MySQL क्लाइंट एप्लिकेशन में की आवश्यकता के अनुसार काम करते हैं तो इसे एकीकृत करें। जैसे MySQL वर्कबेंच, PHPMyAdmin, आदि।
आपकी क्वेरी में, बाहरी SELECT
इसकी आवश्यकता नहीं है, और आंतरिक क्वेरी स्वयं लगभग सही दिखती है, लेकिन जिस तरह से आप इसे पीडीओ के साथ निष्पादित करने का प्रयास करते हैं, वह दोषपूर्ण है।
SELECT
due_date,
date_paid,
DATEDIFF(due_date, date_paid) as date_interval
FROM $tbl_name
WHERE
DATEDIFF(due_date, date_paid) <= $setDay
ORDER BY trans_id DESC
LIMIT $start, $limit
अब इसे पीडीओ में निष्पादित करने के लिए, आपको prepare()/bindParam()/execute()
एक तैयार कथन बनाने के लिए, मापदंडों में बाँधें, और इसे उन मापदंडों के साथ निष्पादित करें (हालांकि आप तालिका के नाम को बाँध नहीं सकते - जो एक चर बना रहना चाहिए)। आपके वर्तमान कोड में, आपके पास PDO::query()
. का मिश्रण है सरल स्थैतिक प्रश्नों के लिए उपयोग की जाने वाली विधि और PDOStatement::execute()
विधि जो एक तैयार कथन को निष्पादित करने के लिए उपयोग की जाती है। आपको query()
. के बजाय तैयार स्टेटमेंट मेथड का इस्तेमाल करना चाहिए ।
// Setup the statement with named parameters like :setDay
$sql = "
SELECT
due_date,
date_paid,
DATEDIFF(due_date, date_paid) as date_interval
FROM $tbl_name
WHERE
DATEDIFF(due_date, date_paid) <= :setDay
ORDER BY trans_id DESC
LIMIT :start, :limit
";
// Make PDO throw useful errors on failure
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Prepare the statement
$stmt = $pdo->prepare($sql);
// Bind your 3 parameters and execute it
$stmt->bindParam(':setDay', $setDay, PDO::PARAM_INT);
$stmt->bindParam(':start', $start, PDO::PARAM_INT);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->execute();
// Fetch your rows returned from the query
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Do something with them
print_r($rows);
मैं हमेशा MySQL डेवलपर्स के लिए इस PDO ट्यूटोरियल
के साथ समय बिताने की सलाह देता हूं। जो पीडीओ के उपयोग को पुराने mysql_*()
. के संदर्भ में रखता है एपीआई से आप पहले से परिचित हो सकते हैं।