Я просто пробую этот запрос в PHP для временной таблицы, но он не работает в PHP.
IF OBJECT_ID('tempdb..##t1') IS NOT NULL
DROP TABLE ##t1
select 'rec1' as col1 into ##t1;
select * from ##t1
PHP-код:
$database = new SQL_DB;
$database->query(
"
IF OBJECT_ID('tempdb..##t1') IS NOT NULL
DROP TABLE ##t1
SELECT 'rec1' as col1 into ##t1;
SELECT * FROM ##t1;
"
);
$rows = $database->resultset();
Класс SQL_DB (упрощенный):
public function __construct(){
//Set DSN
$dsn = 'sqlsrv:Server=' . $this->host . ';Database=' . $this->dbname;
//Set options
/*$options = array(
PDO::ATTR_EMULATE_PREPARES => true,
PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8
);*/
$options = array(
PDO::SQLSRV_ATTR_QUERY_TIMEOUT => $this->TIMEOUT,
PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false
);
//Create a new PDO instance
try {
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
// $this->dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch (PDOException $e) {
$this->error = $e->getMessage();
}
}
//Prepare statement
public function query($query) {
$this->stmt = $this->dbh->prepare($query);
}
//Return result Set
public function resultset($in = "") {
try{
if ($in == ""){
$this->stmt->execute();
}
else{
$this->stmt->execute($in);
}
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}
catch (PDOException $e) {
$this->error = $e->getMessage();
}
}
Отлично работает в Microsost SQL Server Management Studio и во всех других запросахЯ работал с PHP просто отлично, так что это не проблема соединения.
Это определенно связано с таблицей temp и '#'.
Чего мне не хватает?
Обновление:
Это прекрасно работает, если я разделю запрос на 2 части:
$database = new SQL_DB;
$database->query(
"
IF OBJECT_ID('tempdb..##t1') IS NOT NULL
DROP TABLE ##t1
SELECT 'rec1' as col1 into ##t1;
"
);
$database->resultset();
$database->query(
"
SELECT * from ##t1;
"
);
$rows = $database->resultset();