Tôi đang trong quá trình chuyển đổi một số trang PHP cũ để sử dụng PDO."Kết quả hoạt động không chứa trường" bằng PDO với MS SQL
Dưới đây là hai câu hỏi đơn giản (không truy vấn thực tế của tôi) để hỗ trợ sự hiểu biết về các vấn đề tôi đang gặp ...
SELECT afield INTO #temptable FROM atable WHERE anotherfield = 'somevalue';
SELECT afield,anotherfield,onemorefield FROM atable
WHERE afield NOT IN (SELECT * FROM #temptable);
Các truy vấn trên ném lỗi được mô tả trong tiêu đề (hoàn toàn hơn nó ném "Fatal error: của router 'PDOException' với thông điệp 'SQLSTATE [IMSSP]: kết quả hoạt động cho các truy vấn không chứa các lĩnh vực.'")
Nếu tôi thay đổi các truy vấn như thế này ...
with (SELECT afield INTO #temptable FROM atable
WHERE anotherfield = 'somevalue') AS temptable;
SELECT afield,anotherfield,onemorefield FROM atable
where afield NOT IN (SELECT * FROM temptable);
Điều này dường như có được xung quanh lỗi, nhưng phiên bản này của truy vấn là khủng khiếp khủng khiếp không hiệu quả bởi vì nó xuất hiện để chạy truy vấn hấp dẫn cho mỗi so sánh trường duy nhất trong truy vấn khác.
Có cách nào để tạo biểu mẫu đầu tiên (tạo bảng tạm thời một lần) hoạt động với PDO không?
Nó hoạt động tốt trên trang cũ sử dụng mssql.
EDIT: Tôi biết tôi có thể làm điều này theo cách 'lộn xộn' bằng cách tạo bảng thực, chạy nó trong php, sau đó chạy truy vấn thứ hai (trong cuộc gọi php riêng), sau đó chạy truy vấn thứ ba để thả bảng đầu tiên. Nhưng tôi không muốn phải nghỉ mát đến điều đó! :)
Lưu ý rằng các từ khóa SQL như 'SELECT, WHERE, FROM ...' nên được viết hoa. Điều này sẽ cải thiện khả năng đọc. Bạn nên bắt đầu với điều này – hek2mgl
đầu tiên Nếu bạn nhấn mạnh! . – MrVimes
Bạn có thực sự tách các truy vấn bằng dấu chấm phẩy ';' không? – hek2mgl