Tôi dường như không có khả năng để có được một đơn giản mệnh đề WHERE với một tham số để làm việc, tôi thường xuyên nhận được một thông báo lỗi nói:PHP PDO ODBC - Các kiểu dữ liệu không tương thích trong tương đương với toán tử
[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)
Tôi đã thử truy vấn này theo nhiều cách khác nhau, ví dụ:
Chưa đặt tên:
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = ?");
$query->execute(array('assessment'));
Không được đặt tên và sử dụng bindValue đặt nó vào chuỗi
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = ?");
$query->bindValue(1, 'assessment', PDO::PARAM_STR);
$query->execute();
Đặt tên và sử dụng bindParam để đặt nó vào chuỗi:
$val = 'assessment';
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = :myp");
$query->bindParam(':myp', $val, PDO::PARAM_STR);
$query->execute();
Nhưng không có vấn đề làm thế nào tôi làm điều đó, tôi luôn nhận được thông báo lỗi này.
Cột trong câu hỏi là loại: varchar (max), vì vậy có lẽ nó là giả định các tham số được gửi đi là loại 'text' ngay cả khi tôi xác định nó là một giá trị chuỗi (char, varchar)
Tôi không thể thay đổi cơ sở dữ liệu vì nó là một phần mềm khác.
Cách này là gì? Tôi thực sự không muốn phải CAST mỗi lần tôi làm một điều khoản như thế này (hoặc là những gì mọi người làm gì?).
Cảm ơn bạn.
Có cùng một vấn đề ... bạn có tìm ra điều này không? – MizAkita
Bạn đã thử '" SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType LIKE? "˙'? Nếu bạn không sử dụng các ký tự đại diện, nó sẽ hoạt động gần giống như '='. –