2012-11-29 12 views
5

I nie wydają się być w stanie uzyskać proste WHERE z parametrem do pracy, jestem ciągle otrzymuję komunikat o błędzie:PHP PDO ODBC - Typy danych są niezgodne w równym operatora

[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) 

Próbowałem tego zapytania na wiele różnych sposobów, np.

Nienazwana:

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

Unnamed i stosując ustawienie bindValue go na ciąg

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

nazwanych i korzystania bindParam aby ustawić go na wyrażenie:

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

Ale bez względu na to jak ja zrób to, zawsze otrzymuję ten komunikat o błędzie.

Kolumna na pytanie typu: varchar (max), więc prawdopodobnie jest przy założeniu, że parametr wysyłany jest typu „text”, nawet kiedy podać go jako wartość ciągu (char, varchar)

Nie mogę zmienić bazy danych, tak jak w przypadku innego oprogramowania.

Co to oznacza? Naprawdę nie chcę mieć CAST za każdym razem, gdy robię klauzulę where, czy to jest to, co wszyscy robią?).

Dziękuję.

+0

Masz ten sam problem ... wymyśliłeś to? – MizAkita

+0

Czy próbowałeś "SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType LIKE?" ˙'? Jeśli nie użyjesz symboli wieloznacznych, będzie funkcjonował prawie identycznie jak '='. –

Odpowiedz

0

Czy próbowałeś zmienić typ pola na CHAR o VARCHAR? (a nie VARCHAR (MAX), które mają ten rodzaj niekompatybilności).

Czy próbowałeś konwertować typy danych?

$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(); 

Przykro mi, ale nie mam MS SQL Server do testowania kodu, ale otrzymuję tę końcówkę z tej strony: https://msdn.microsoft.com/en-us//library/ms176089.aspx

Należy zauważyć, że ostrzeżenie:

Code tłumaczenia stron są obsługiwane dla typów danych char i varchar, , ale nie dla typu danych tekstowych. Podobnie jak w przypadku wcześniejszych wersji programu SQL Server, utrata danych podczas tłumaczenia stron kodowych nie jest zgłaszana.

Mam nadzieję, że pomoże!

2

Mieliśmy problem podobny do tego, w naszym przypadku mieliśmy następujące w naszym pliku /etc/odbc.ini:

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

Odkryliśmy, że jeśli zmienisz TDS_Version do 7.2 wszystkich naszych zapytań powiązań zaczął pracować prawidłowo .

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

Nie jestem pewien co do tego powodu, ale podejrzewam, że jest to prawdopodobnie udokumentowane.

Powiązane problemy