Следующий код работает так, как ожидалось (предполагается, что существуют переменные):
$connectionInfo = ['Database'=>$dbName, 'UID'=>$username, 'PWD'=>$pwd, 'ReturnDatesAsStrings'=>true, 'CharacterSet'=>'UTF-8'];
$conn = sqlsrv_connect($server, $connectionInfo);
$select = sqlsrv_query($conn, 'SELECT * INTO #mytable_temp FROM mytable WHERE myfield = \'myvalue\'', []);
$select2 = sqlsrv_query($conn, 'SELECT * FROM #mytable_temp ', []);
if (!$select2) {
$errors = sqlsrv_errors();
var_dump($errors);
} else {
$res = sqlsrv_fetch_array($select2, SQLSRV_FETCH_ASSOC);
var_dump($res);
}
Однако, если я изменю $select на следующее, это не сработает:
$select = sqlsrv_query($conn, 'SELECT * INTO #mytable_temp FROM mytable WHERE myfield = ?', ['myvalue']);
Я получаю сообщение об ошибке при запуске второго оператора, который говорит "Недопустимое имя объекта" #mytable_temp ". Почему использование привязки параметров приводит к тому, что таблица temp не будет видна?
Мне известно, что я могу заставить его работать, если включить оба оператора в один и тот же оператор sqlsrv_query(), но это не вариант для моего варианта использования. Я также знаю, что это работает, если вы используете глобальную таблицу (## mytable_temp), но это тоже не вариант.
Я запускаю PHP 5.4.12 и пробовал код на SQL Server 11.0.3 (2012 SP1) и 10.50.4000 (2008 SP2).