Когда я использую mysqli, я делаю:
$mysqli->query('create temporary table __tmp(tm_start int, tm_end int, tm_origin int, tm_num int)');
$mysqli->query('insert into __tmp values
( 1447977600, 1448582400, 1447977600, 0 ),
( 1448582400, 1449187200, 1448582400, 1 )');
$result=$mysqli->query('select * from __tmp');
и получите то, что я только что вставил.
Но когда я использую подобный код с PDO, подключенным к MSSQL:
$pdo->query("create table #__tmp(tm_start int, tm_end int, tm_origin int, tm_num int)");
$pdo->query('insert into #__tmp values
( 1447977600, 1448582400, 1447977600, 0 ),
( 1448582400, 1449187200, 1448582400, 1 )');
второй запрос возвращает ошибку таблица не существует.
Я предполагал, что все после$ pdo = новый PDO (…)‘будет такой же сеанс, как в mysqli, а временные таблицы будут уничтожены только после’$ PDO = нуль».
Может быть, я должен явно указать PDO выполнить все запросы, сохраняя то же соединение? Что-то вроде флага «оставайся в живых»? Транзакции кажутся чрезмерными для моих нужд.
Я знаю о глобальных временных таблицах (##), но другой сеанс этого же пользователя может получить доступ к этим таблицам или изменить их, и у нас будут проблемы с параллелизмом.
Если я буду использовать постоянное соединение, оно будет зависать, и снова любой пользователь может подключиться к нему и снова параллелизм.
Я бы тоже не хотел использовать хранимые процедуры. Я должен поддерживать два класса (на основе mysql и mssql) для одних и тех же задач, поэтому я хочу сохранить всю логику sql в php.
Задача ещё не решена.
Других решений пока нет …