मैं ODBC (v2000.86.359.00) के साथ एक पीडीओ कनेक्शन है एक एसक्यूएल सर्वर (v8.00.2039 SP4 मानक संस्करण) डेटाबेस से कनेक्ट साथ पीएचपी पीडीओ/ODBC का उपयोग करना।त्रुटि जब तैयार बयान के दिनांक पैरामीटर बंधन - एसक्यूएल सर्वर
यह काम करता है:
$id = 486;
$duedate = 'June 27, 2012';
$query ="INSERT into AssetHistory (AssetID, DateDue) Values($id, $duedate);";
$noParams = $db->exec($query);
$db->query($query);
लेकिन अगर मैं इस तरह एक तैयार बयान का उपयोग करने का प्रयास करें:
$sql = 'INSERT into AssetHistory
(AssetID, DateDue)
Values(:id, :duedate);';
$input = array(':id'=>486, ':duedate'=>'June 27, 2012');
$smt = $db->prepare($sql);
$smt->execute($input);
मैं इस त्रुटि मिलती है (($ smt- से> errorInfo)):
"[Microsoft][ODBC Driver Manager] Function sequence error (SQLExecute[0] at ext\pdo_odbc\odbc_stmt.c:254)"
मैंने कोशिश की है: 1) संलग्न: सिंगल कोट्स में डुबेट 2) बाध्यकारी यूनिक्स टाइमस्टैम्प पूर्णांक 3) बाइंडिंग के लिए तारीख:
तैयारी कर इस बिंदु पर पहले php दिनांक समय वस्तु 4) एसक्यूएल बयान में सिर्फ $ DUEDATE सम्मिलित करने के लिए DUEDATE मैं $ db-> क्वेरी पद्धति का उपयोग करके और आदानों sanitizing अटक सकता है जितना संभव मैं कर सकता हूं, लेकिन मैं वास्तव में किसी भी सुझाव की सराहना करता हूं।
विंडोज सर्वर 2003 बॉक्स पर PHP 5.38 का उपयोग करना।
अपडेट: मैंने इस प्रश्न के पिछले संस्करण से कुछ चर हटा दिए हैं। त्रुटि संदेश बदल गया है, लेकिन अंतिम परिणाम वही है।
तो जैसे एसक्यूएल करने के लिए परिवर्तित समारोह जोड़ने के साथ साथ$smt->bindValue(':id', 486, PDO::PARAM_INT);
$smt->bindValue(':duedate', 'June 27, 2012', PDO::PARAM_STR);
:
$sql = 'INSERT into AssetHistory
(AssetID, DateDue)
Values(:id, convert(datetime,:duedate, 100));';
कौन देता है: "COUNT फ़ील्ड ग़लत
मैं मैन्युअल रूप से भी तो जैसे पैरामीटर बाध्यकारी की कोशिश की है या वाक्यविन्यास त्रुटि "
और मैंने देखा है कि SQL सर्वर वास्तव में play nice यूनिक्स टाइमस्टैम्प के साथ नहीं है ...
'duedate' में क्या होता है? –
स्वरूपित दिनांक के साथ स्ट्रिंग - मैंने '27 जून, 2012' और '2012-06-27 00: 00.000' –
की कोशिश की है, ठीक है, क्या आपने लंबे प्रारूप की कोशिश की है: '$ smt-> bindValue (': duedate' , $ DUEDATE, पीडीओ :: PARAM_INT); '? या, '$ duedate = intval ($ duedate) कास्टिंग; '? – Wrikken