2012-11-29 20 views
5

के बराबर में असंगत हैं मैं एक साधारण जहां काम करने के लिए एक पैरामीटर के साथ खंड प्राप्त करने के लिए सक्षम होने के लिए नहीं है, मैं लगातार एक त्रुटि संदेश कह रही हो रही है:पीएचपी पीडीओ ODBC - डेटा प्रकार ऑपरेटर

[Microsoft][ODBC SQL Server Driver][SQL Server]The data types varchar(max) and text are incompatible in the equal to operator. (SQLExecute[402] at ext\pdo_odbc\odbc_stmt.c:254) 

मैंने इस क्वेरी को कई अलग-अलग तरीकों से आजमाया है, उदाहरण के लिए

बेनाम:

$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = ?"); 
$query->execute(array('assessment')); 

अनाम और bindValue स्ट्रिंग के लिए यह निर्धारित करने के लिए bindParam का उपयोग कर स्ट्रिंग के लिए यह स्थापित करने

$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = ?"); 
$query->bindValue(1, 'assessment', PDO::PARAM_STR); 
$query->execute(); 

नाम और का उपयोग कर:

$val = 'assessment'; 
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = :myp"); 
$query->bindParam(':myp', $val, PDO::PARAM_STR); 
$query->execute(); 

लेकिन कोई फर्क नहीं पड़ता कि कैसे मैं ऐसा करो, मुझे हमेशा यह त्रुटि संदेश मिलता है।

प्रश्न में स्तंभ प्रकार की है: varchar (max), तो शायद यह पैरामीटर संभालने है भेजा जा रहा प्रकार 'पाठ' यहां तक ​​कि एक स्ट्रिंग मान जब मैं होने के लिए यह निर्दिष्ट की है (वर्ण, Varchar)

मैं डाटाबेस को बदल नहीं सकता क्योंकि यह सॉफ्टवेयर के दूसरे हिस्से के लिए है।

इसके आसपास क्या तरीका है? मैं वास्तव में ऐसा नहीं करना चाहता हूं हर बार जब मैं ऐसा कहता हूं (या यह सब क्या करता है?)।

धन्यवाद।

+0

एक ही समस्या होने के बाद ... क्या आप इसे समझ गए? – MizAkita

+0

क्या आपने कोशिश की है कि "शीर्ष 10 चुनें * bksb_Resources से संसाधन संसाधन टाइप करें?" ˙'? यदि आप वाइल्डकार्ड का उपयोग नहीं करते हैं, तो यह लगभग समान रूप से '=' के रूप में कार्य करेगा। –

उत्तर

0

क्या आपने फ़ील्ड प्रकार को CHAR o VARCHAR में बदलने की कोशिश की है? (और VARCHAR (MAX) नहीं है जिसमें इस प्रकार की असंगतता है)।

या आपने डेटा प्रकारों को बदलने की कोशिश की है?

$val = 'assessment'; 
$query = $DBH->prepare(
    "SELECT TOP 1 * FROM bksb_Resources WHERE 
    CONVERT(VARCHAR, ResourceType) = :myp"); 
$query->bindParam(':myp', $val, PDO::PARAM_STR); 
$query->execute(); 

मैं माफी चाहता हूँ, लेकिन मैं एमएस एसक्यूएल सर्वर कोड का परीक्षण करने की जरूरत नहीं है, लेकिन मैं इस पेज से कि टिप मिलती है: https://msdn.microsoft.com/en-us//library/ms176089.aspx

ध्यान दें कि चेतावनी:

कोड पेज अनुवाद चार और वर्कर डेटा प्रकारों, के लिए समर्थित हैं लेकिन टेक्स्ट डेटा प्रकार के लिए नहीं हैं। SQL सर्वर के पुराने संस्करणों के साथ, कोड पृष्ठ अनुवाद के दौरान डेटा हानि की रिपोर्ट नहीं की गई है।

उम्मीद है कि यह मदद करता है!

2

हम एक ऐसी समस्या इस के समान था, और हमारे मामले में हम अपने /etc/odbc.ini फ़ाइल में निम्न था:

[ServerAlias] 
Driver = FreeTDS 
Server = 1.2.3.4 
PORT = 1433 
TDS_Version = 8.0 

हमें पता चला है कि अगर आप हमारे बाँध सभी जिज्ञासाओं के TDS_Version को 7.2 बदलने सही ढंग से काम करना शुरू कर दिया ।

[ServerAlias] 
Driver = FreeTDS 
Server = 1.2.3.4 
PORT = 1433 
TDS_Version = 7.2 

मुझे इस कारण पर यकीन नहीं है, लेकिन मुझे संदेह है कि यह शायद कहीं कहीं दस्तावेज है।