SQL 쿼리 (특히 INSERT, UPDATE 및 DELETE)를 로깅하여 이러한 DB 변경을 다른 서버의 동일한 DB로 가져 오려고합니다. 나는 다음과 같이 내 쿼리를 실행하기 위해 PHP 및 SQLSRV를 사용 sqlsrv를 사용하여 현재 SQL 쿼리를 PHP로 출력하는 방법은 무엇입니까?
$query = "UPDATE table SET column = 0 WHERE id = (?)";
$params = array($myid);
sqlsrv_query($conn, $query, $params);
지금 내가 로그 테이블에합니다 (PARAMS 포함) 전체 SQL 쿼리를 저장할. 나는 방아쇠로 이것을 할 수 있었으면 좋겠고 다음과 같은 것을 시도했다.
SELECT dest.text
FROM sys.dm_exec_requests dem CROSS APPLY sys.dm_exec_sql_text(dem.sql_handle) dest
WHERE session_id = @@SPID
그러나 이것은 항상 스스로를 반환한다. 다음은 더 나은 것 같다 : 그 후
DECLARE @sql nvarchar(max)
SET @sql = 'DBCC INPUTBUFFER(' + CAST(@@SPID AS nvarchar(100)) + ')'
CREATE TABLE #SQL (
EventType varchar(100),
Parameters int,
EventInfo nvarchar(max)
)
INSERT INTO #SQL
EXEC sp_executesql @sql
SELECT @sql = EventInfo FROM #SQL
DROP TABLE #SQL
, @Sql이
(@P1 int)UPDATE table SET column = 0 WHERE id = (@P1)
같은 것을 포함하지만 더 PARAMS이없는 ... 을 포함한 전체 SQL 쿼리를 얻을 방법이 있나요 매개 변수?
그렇지 않으면 PHP에서 모든 쿼리를 변경하고 sqlsrv_query()의 '$ params'매개 변수를 사용하지 않아야한다고 생각합니다.
감사합니다.
이것은 로깅 작업을 수행하는 약간의 기능으로 지금하고있는 작업입니다. 나는 더 쉬운 방법이 있기를 바랐다. 이제는 다른 데이터 유형 (int, string, DateTimes 등)의 변환 작업을 수행해야하고 영향을받는 모든 SQL 쿼리를 자체 함수를 사용하도록 변경해야하기 때문입니다 sqlsrv_query() 대신. – Robert