जाहिर है,
SELECT * FROM (SELECT ? )
... मान्य MySQL सिंटैक्स के रूप में मान्यता प्राप्त नहीं है। एक टेबल नाम गुम है।
संपादित करें , आपकी टिप्पणियों के संबंध में:
सबसे पहले, कृपया ध्यान दें कि ?
. को प्रतिस्थापित करके इस कथन को कंसोल में निष्पादित करना एक स्थिरांक के साथ आपकी स्थिति का अनुकरण नहीं करता है, इसलिए मैं तुलना के लिए परिणाम को अमान्य मानूंगा।
लेकिन फिर, इसे बिना निष्पादित करते हुए ?
स्वाभाविक रूप से, एक त्रुटि देगा।
ऐसा इसलिए है क्योंकि केवल चयन को क्रियान्वित करना आपकी स्थिति के लिए अप्रासंगिक है। आपके PHP कोड में, यह निष्पादन नहीं है जो विफल हो जाता है बल्कि तैयारी . तो कंसोल का उपयोग करके इसका अनुकरण करने का उचित तरीका होगा PREPARE
बयान।
तो एक
. कर रहे हैंPREPARE myStmt
FROM 'SELECT * FROM (SELECT ? ) AS tmp WHERE NOT EXISTS (
SELECT Identifier FROM eeg WHERE Identifier = ?
) LIMIT 1'
आपकी समस्या को अधिक सटीक रूप से पुन:पेश करेगा।
अब, ऐसा लगता है कि PREPARE
पैरामीट्रिज्ड नेस्टेड प्रश्नों को समझने में कठिनाई होती है जो FROM
. में दिखाई देते हैं खंड . इन उदाहरणों पर एक नज़र डालें:
PREPARE myStmt FROM "select * from (select ? from eeg) tmp";
(काम नहीं करता)
PREPARE myStmt FROM "select *,? from (select * from eeg) tmp";
(काम करता है)
PREPARE myStmt FROM "select *,? from (select 'asdf') tmp";
(काम करता है)
PREPARE myStmt FROM "select * from eeg where Identifier in (select ?)";
(काम करता है)
जिज्ञासु व्यवहार, लेकिन मैं केवल यह अनुमान लगा सकता हूं कि जब एक नेस्टेड SELECT
FROM
. में क्लॉज में पैरामीटर हैं, MySQL में स्टेटमेंट तैयार करने के लिए कोई सुराग नहीं है ।
मेरे सुझाव के लिए, अगर मैं समझता हूं कि आप क्या करने की कोशिश कर रहे हैं, तो आपको नेस्टेड चयन में पैरामीटर की आवश्यकता नहीं है। FROM
के लिए आप इसे बाहर ले जा सकते हैं और नेस्टेड चयन में एक स्थिरांक हार्डकोड कर सकते हैं . निम्नलिखित कोड
if ($usertest = $datasqli->prepare("INSERT INTO eeg (Identifier)
SELECT ? from (select 1) tmp WHERE ? NOT IN
(SELECT Identifier FROM eeg WHERE Identifier = ?)")) {
...चाल करना चाहिए।