몇 년 전 누군가 쓴 몇 가지 PHP/MySQL보고 코드를 업데이트하고 있습니다. 단일 PHP 페이지에는 50 개가 넘는 SQL 문이 있습니다. 그들 중 일부는 임시 테이블을 생성하며, 모두 동적 테이블 (예 : Report_201701)을 적어도 하나 이상 참조합니다.이 테이블은 변수를 사용하는 PHP에서 간단합니다.준비된 문을 보는 방법 또는 동적 테이블 이름을 포기해야합니까?
그러나 이러한 모든 명령문을 MySQL Workbench에 적용하여 문제를 해결하고 향상시키기 때문에 동적 테이블 이름에 변수를 사용하기 때문에 준비된 명령문의 출력을 볼 수 없기 때문에 문제가 발생합니다.
동적 SQL에 익숙하지 않습니다. 쿼리 결과를 보거나 출력 할 수있는 방법이 있습니까? According to this post 그럴 수 없습니다.
문장의 몇
내가이 같은 변수에 할당하여 볼 수 있었던 하나의 값 반환 :set @sqlQuery =
Concat(
'SELECT 1 as "A"
into @sqlOut;'
);
#$opentickets = mysql_result($sqlQuery, 0);
PREPARE stmt1 from @sqlQuery;
EXECUTE stmt1;
deallocate prepare stmt1;
select @sqlOut;
# @sqlOut
-----------
1
을하지만 여러 열 또는 여러 행을 반환 결과를 시도하는 경우 다음과 같은 오류가 발생합니다.
set @sqlQuery =
Concat(
'SELECT 1 as "A", 2 as "B", 3 as "C"
into @sqlOut;'
);
#$opentickets = mysql_result($sqlQuery, 0);
PREPARE stmt1 from @sqlQuery;
EXECUTE stmt1;
deallocate prepare stmt1;
select @sqlOut;
Error Code: 1222. The used SELECT statements have a different number of columns
set @sqlQuery =
Concat(
'SELECT 1 as "A"
UNION SELECT 2 as "A"
UNION SELECT 3 as "A"
into @sqlOut;'
);
#$opentickets = mysql_result($sqlQuery, 0);
PREPARE stmt1 from @sqlQuery;
EXECUTE stmt1;
deallocate prepare stmt1;
select @sqlOut;
Error Code: 1172. Result consisted of more than one row
가장 좋은 방법은 무엇입니까? 지금 동적 테이블 이름을 정적 이름으로 대체 하시겠습니까? (이 상황에서 임시 테이블은 날짜를 나타내는 이름을 가질 필요가 없으므로 영구적으로 그렇게 할 생각입니다.)
참고로, 데이터베이스 엔진에가는 모든 것을 기록합니다. 정말 유용합니다. SQL을 구축하는 많은 라이브러리를 보았을 때, 그들이 한 일을 알려줄 것입니다. 이 모든 것은 SQL 디버깅에 매우 유용합니다. –
팁 @ RyanVincent에 감사드립니다. 내가 필요로 할 때 그것을 켜기 위해 어디에서 점검해야 할 것이다. – MJA