2014-04-18 2 views
1

SQLite에서 MySql으로 네이티브 C++ 응용 프로그램을 포팅합니다. SQLite에서는 다음과 같은 준비된 명령문 매개 변수를 사용할 수 있습니다.MySql C API : 준비된 매개 변수가 지원되는 매개 변수입니까?

SELECT * FROM `Table` WHERE `Id` = @Id 

MySql 문서에는 이러한 기능에 대한 내용이 없습니다. 대신 MySql에서 다음과 같은 이름없는 매개 변수를 사용합니다.

SELECT * FROM `Table` WHERE `Id` = ? 

쿼리가 매우 쉬운 경우에는 문제가되지 않습니다. 그러나 10-15 개의 매개 변수를 사용하는 복잡한 쿼리의 경우 statment를 업데이트해야한다면이 방법이 좋지 않습니다. 각각의 이름없는 매개 변수가 올바른 위치에 있는지 그리고 매개 변수 배열의 색인이 어떤 질문 부호인지 기억해 야합니다. 그래서, 저에게는 MySql에 명명 된 prepared statements 매개 변수에 대한 지원이 없다는 것이 이상하게 보입니다.

MySql C API에서 질문 기호로 표시된 이름없는 매개 변수 대신 명명 된 매개 변수를 준비하는 방법이 있습니까?

답변

0

SQLite에있는 것처럼이 기능에 대한 공식적인 지원이 없습니다. 그러나이를 에뮬레이션 할 수 있습니다. 대신 한 명령을 보내는 :

SET @Id = 1 
SELECT * FROM `Table` WHERE `Id` = @Id 
SET @Id = NULL 

(예를 들어, std:unordered_map)를 이름 - 값 쌍으로 쿼리 매개 변수를 가지고, 그것은되지 않습니다 :

SELECT * FROM `Table` WHERE `Id` = ? 

이 두 사람을 보낼 필요 문제는 자동으로 변수를 만들고 정리하는 SQL 쿼리를 생성합니다. 물론 1 개의 쿼리 대신 많은 변수를 쿼리로 보내야하며 필요한 경우 변수를 정리하는 데 같은 양의 쿼리를 보내야합니다. SQL 쿼리에서 변수를 사용하면 모든 변수를 무시할 위험이 있습니다. 그러나 이러한 접근법은 이름없는 매개 변수보다 복잡한 쿼리에서 여전히 유용하고 훨씬 편리합니다.

관련 문제