2012-09-20 20 views
5

पर एक खाली स्ट्रिंग बाध्यकारी है, तो मुझे एमएसक्यूएल कार्यों से पीडीओ में एक ऐप ले जाना है। सब कुछ सुचारू रूप से चल रहा था जब तक कि मुझे खुद को एक अच्छी छोटी सी बग नहीं मिली, मैं कामकाज नहीं कर सकता।एचवाई 104 एसक्यूएल सर्वर त्रुटि जब एक पीडीओ तैयार क्वेरी

$req_action="INSERT INTO [".DB_SCHEMA."].[dbo].[".ACTION_TABLE."] 
([ID_CONTACT] 
,[ID_ADN] 
,[TYPE_ACTION] 
,[MOTIF_ENTRANT] 
,[COMMENTAIRES_APPEL] 
,[CODE_CAMPAGNE] 
,[EMAIL] 
,[SUJET] 
,[STATUT_EMAILING] 
,[DATE_ENVOI] 
,[DELAI_OUVERTURE] 
,[MAIL_CLIENT] 
,[DATE_OUVERTURE] 
,[LIEN_CLIQUE] 
,[DELAI_CLIC] 
,[DATE_CLIC] 
,[DATE_ACTION] 
,[USER_ID] 
,[LOGIN] 
,[DATE_CHARGEMENT] 
) 
VALUES 
('' 
,'' 
,'e-mailing' 
,'' 
,'' 
,'' 
,:email 
,:sujet 
,:statut 
,convert(datetime,:date_envoi,103) 
,:delai 
,:mail 
,convert(datetime,:date_ouverture,103) 
,:lien_clic 
,:delai_clic 
,convert(datetime,:date_clic,103) 
,convert(datetime,:date_action,103) 
,'1' 
,'AUTO' 
,getdate() 
)"; 

और मेरे बाइंडिंग:

$prep_req_action->bindValue(":email",$email,PDO::PARAM_STR); 
$prep_req_action->bindValue(":sujet",$sujet,PDO::PARAM_STR); 
$prep_req_action->bindValue(":statut",$statut_emailing,PDO::PARAM_STR); 
$prep_req_action->bindValue(":date_envoi",$sql_date_envoi,PDO::PARAM_STR); 
$prep_req_action->bindValue(":delai",$delai_ouverture,PDO::PARAM_STR); 
$prep_req_action->bindValue(":mail",$mail_client,PDO::PARAM_STR); 
$prep_req_action->bindValue(":date_ouverture",$sql_date_ouverture,PDO::PARAM_STR); 
$prep_req_action->bindValue(":lien_clic",$lien_clique,PDO::PARAM_STR); 
$prep_req_action->bindValue(":delai_clic",$delai_clic,PDO::PARAM_STR); 
$prep_req_action->bindValue(":date_clic",$sql_date_clic,PDO::PARAM_STR); 
$prep_req_action->bindValue(":date_action",$sql_date_action,PDO::PARAM_STR); 

मुद्दा है जब भी अपने पीएचपी चर में से एक एक रिक्त स्ट्रिंग (एक स्वचालित csv फ़ाइल से आ रही होने वाला

यहाँ मेरी तैयार अनुरोध है यह वास्तव में बहुत कुछ होता है) SQL सर्वर एक त्रुटि HY104 (अमान्य परिशुद्धता) देता है।

मेरे सभी फ़ील्ड NULL अधिकृत हैं इसलिए मैंने PDO::ATTR_ORACLE_NULLS विशेषता को PDO::NULL_EMPTY_STRING पर खाली स्ट्रिंग्स को नल में परिवर्तित करने के लिए स्विच किया लेकिन व्यवहार बिल्कुल वही है।

केवल वैकल्पिक हल मैंने पाया कि मेरा चर यह बाध्यकारी से पहले अशक्त php के लिए सेट करने के लिए रिक्त है परीक्षण करने के लिए है:

$lien_clique = (empty($lien_clique)) ? null : $lien_clique; 

यह वास्तव में काम करता है लेकिन मुझे लगता है पीडीओ तरह NULL_EMPTY_STRING से जोड़कर देखते हैं मेरे लिए यह करना चाहिए और मेरे पास अद्यतन करने के लिए बहुत सी क्वेरी है और मैं इस tweek के साथ सब कुछ की रक्षा नहीं करना चाहता।

क्या किसी को समस्या का समाधान और समाधान के बारे में कोई विचार है?

FYI करें: लिनक्स पर PHP 5.3.1, pdo_sqlsrv 3.0 और SQL सर्वर 2000

+0

मुझे पता है कि यह पुराना है, लेकिन आपने यह करने का प्रयास किया है: $ prep_req_action-> bindValue (": ईमेल", ट्रिम ($ ईमेल), पीडीओ :: PARAM_STR); यह सुनिश्चित करने के लिए कि चीजों को भ्रमित करने वाली कोई सफेद जगह नहीं है। – FreudianSlip

+0

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

उत्तर

0

ऐसा लगता है कि आप एक आकार स्ट्रिंग स्तंभ पर निर्धारित किया है और अपने डेटाबेस शायद की आवश्यकता है कि यह प्रविष्टि के समय पर निर्दिष्ट किया जाता है ।

का उपयोग करके देखें

...

$stmt->bindValue(":field",$value,PDO::PARAM_STR,$length); 

क्षेत्र है कि आप त्रुटि है, जहां $ लंबाई अपने डेटाबेस में विनिर्दिष्ट क्षेत्र का आकार है देता है पर। ऐसा करने में दर्द होता है, लेकिन मुझे कुछ समय पहले ओडीबीसी ड्राइवर के साथ इस मुद्दे में चलना याद है।