>  기사  >  데이터 베이스  >  PHP PDO의 MySQL 저장 프로시저에서 변수를 검색하는 방법은 무엇입니까?

PHP PDO의 MySQL 저장 프로시저에서 변수를 검색하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-06 18:13:03183검색

How to Retrieve Variables from MySQL Stored Procedures in PHP PDO?

PHP PDO의 MySQL 저장 프로시저에서 변수 검색

이 논의의 목적은 PHP를 사용하여 MySQL 저장 프로시저에서 변수를 검색하는 포괄적인 솔루션을 제공하는 것입니다. PDO.

문제

PHP PDO의 MySQL 저장 프로시저에서 LAST_INSERT_ID()를 얻으려고 시도하는 동안 구현된 코드가 작동하지 않는 것을 발견했습니다.

해결책

안타깝게도 이 문제는 PHP가 OUT 매개변수가 있는 MySQL 저장 프로시저를 처리할 때 발생하는 오래된 버그로 인해 발생할 수 있습니다.

다단계 프로세스

해결 방법에는 2단계 프로세스가 포함됩니다.

  1. 입력 변수를 사용하여 프로시저 실행: 입력을 사용하여 프로시저 실행 그리고 결과를 저장할 MySQL 변수를 지정합니다.
  2. 쿼리 변수: 별도의 쿼리를 실행하여 결과가 포함된 MySQL 변수를 선택합니다.

변수를 사용한 호출 절차

제공된 PHP 코드에서 문제가 있는 바인딩을 다음으로 바꿉니다.

$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)");

이것은 PHP 변수 $name을 입력 매개 변수에 바인딩하고 생성합니다. 출력을 저장하기 위한 @returnid라는 MySQL 변수. @ 기호는 returnid가 MySQL 변수임을 나타냅니다.

변수 선택

프로시저 실행 후 다음 쿼리를 사용하여 @returnid 변수를 검색합니다.

$result = $db->query("SELECT @returnid AS result_id");
$row = $result->fetch();
$returnid = $row['result_id'];

OUT 매개변수를 사용한 대체 접근 방식

INOUT 및 OUT 매개변수 사용을 포함하여 보다 완전한 솔루션이 필요한 경우 다음 코드 샘플과 팁을 활용할 수 있습니다.

팁:

  • 더 나은 오류 처리를 위해 PDO의 ATTR_EMULATE_PREPARES를 true로 설정하세요.
  • PHP 변수를 IN 매개변수에만 바인딩하세요.

샘플 코드:

SQL 프로시저:

CREATE PROCEDURE demoSpInOutSqlVars(IN pInput_Param INT, INOUT pInOut_Param INT, OUT pOut_Param INT)
BEGIN
    SET pInOut_Param = ABS(pInput_Param) + ABS(pInOut_Param);
    SET pOut_Param = ABS(pInput_Param) * -3;
END

PHP 코드:

$phpInParam = 5;
$phpInOutParam = 404;
$phpOutParam = null;

$stmt = $db->prepare("CALL demoSpInOutSqlVars(:phpInParam, @varInOutParam, @varOutParam)");
$stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT);
$db->exec("SET @varInOutParam = $phpInOutParam");
$stmt->execute();

$result = $db->query("SELECT @varInOutParam AS phpInOutParam, @varOutParam AS phpOutParam FROM dual");
$row = $result->fetch();

$phpInOutParam = $row['phpInOutParam'];
$phpOutParam = $row['phpOutParam'];

위 내용은 PHP PDO의 MySQL 저장 프로시저에서 변수를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.