PHP의 MySQLI Extension을 사용하여 데이터베이스와 상호 작용할 때 저장된 프로 시저를 호출하는 것은 드문 일이 아닙니다. 이 경우 MySQL의 저장 프로 시저 오류는 일반적으로 PHP가 호출되는 곳으로 직접 반환되지 않기 때문에 디버깅 오류가 비교적 어려워 질 수 있습니다. 다행히도 PHP의 MySQLI_STMT :: $ 오류 속성은 저장된 프로 시저 호출에서 오류 정보를 캡처하여 디버깅에 대한 단서를 제공하는 데 도움이 될 수 있습니다. 이 기사는이 속성을 사용하여 저장 프로 시저 통화 실패를 디버그하는 방법을 자세히 설명합니다.
PHP에서 MySQLI_STMT :: $ 오류는 전처리 문과 관련된 오류 정보를 얻는 데 사용됩니다. $ 오류 속성은 문을 실행할 때 발생하는 오류를 설명하는 문자열을 반환합니다. 저장된 프로 시저 호출이 실패하거나 SQL 쿼리가 실패하면이 속성을 사용하여 문제의 근본 원인을 찾는 데 도움이되는 자세한 오류 정보를 얻을 수 있습니다.
MySQLI_STMT :: $ 오류 로 저장 프로 시저 호출을 디버그하는 방법을 보여 주려면 먼저 데이터베이스에 연결하고 저장 프로 시저를 올바르게 설정해야합니다. get_user_info 라는 저장된 절차가 있다고 가정합니다.이 절차는 user_id 매개 변수를 사용하여 사용자의 정보를 반환합니다. 다음은이 저장 프로 시저를 호출하고 MySQLI_STMT :: $ 오류를 사용하여 디버그 정보를 얻는 방법을 보여주는 PHP 스크립트입니다.
먼저 데이터베이스에 대한 연결을 생성하고 성공한 지 확인해야합니다.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_database";
// 연결을 만듭니다
$conn = new mysqli($servername, $username, $password, $dbname);
// 연결을 확인하십시오
if ($conn->connect_error) {
die("연결이 실패했습니다: " . $conn->connect_error);
}
?>
다음으로 저장된 절차를 호출 할 준비가되었습니다. 통화가 실패하면 MySQLI_STMT :: $ 오류를 사용하여 자세한 오류 정보를 얻습니다.
<?php
$user_id = 1; // 쿼리하려는 사용자를 가정 해보십시오 ID
// 저장된 절차 호출을 준비하십시오
$stmt = $conn->prepare("CALL get_user_info(?)");
if ($stmt === false) {
die("저장된 절차 준비가 실패했습니다: " . $conn->error);
}
// 바인딩 매개 변수
$stmt->bind_param("i", $user_id);
// 저장된 절차를 실행하십시오
$stmt->execute();
// 실행이 성공했는지 확인하십시오
if ($stmt->errno) {
echo "저장된 프로 시저 실행이 실패했습니다: " . $stmt->error;
} else {
// 결과를 얻으십시오
$result = $stmt->get_result();
$user = $result->fetch_assoc();
print_r($user);
}
// 가까운 진술
$stmt->close();
// 연결을 닫으십시오
$conn->close();
?>
저장된 프로 시저 호출이 실패하면 $ stmt-> errno 및 $ stmt-> 오류는 상세한 오류 정보를 제공합니다. 예를 들어, 저장된 프로 시저 이름이 잘못되었거나 매개 변수가 일치하지 않으면 $ stmt-> 오류가 MySQL 오류 메시지를 반환하여 문제를 찾는 데 도움이됩니다.
일반적인 오류에는 다음이 포함될 수 있습니다.
저장된 절차가 존재하지 않습니다 : 저장된 프로 시저 이름이 잘못되거나 생성되지 않은 경우 MySQLI_STMT :: $ 오류 에 알려지지 않은 프로 시저 오류 메시지가 표시됩니다.
매개 변수 유형 불일치 : 저장 프로 시저가 정수 매개 변수를 기대하지만 문자열을 전달하면 mysqli_stmt :: $ 오류가 유형 불일치가 아닌 것으로 나타납니다.
보다 자세한 디버깅 정보가 필요한 경우 MySQL의 표시 절차 상태를 사용하고 표시 오류 명령을 사용하여 저장 프로 시저의 상태 및 오류 로그를 확인할 수 있습니다.
<?php
$result = $conn->query("SHOW PROCEDURE STATUS WHERE Name = 'get_user_info'");
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "저장된 절차 상태: " . $row["Db"] . " - " . $row["Name"] . "\n";
}
} else {
echo "저장된 절차 정보가 발견되지 않았습니다。\n";
}
?>
이러한 방법을 통해 저장된 절차에 대한 자세한 정보를 얻을 수있어 문제를 찾는 데 도움이됩니다.
MySQLI_STMT :: $ 오류를 사용하면 저장 프로 시저가 호출 될 때 오류 디버깅 프로세스를 크게 단순화 할 수 있습니다. 개발자에게 자세한 오류 정보를 제공하여 문제를 신속하게 식별하고 문제를 해결하는 데 도움이됩니다. 데이터베이스의 상태 쿼리 및 오류 로그를 결합하여 저장된 프로 시저 호출 고장 문제를보다 효율적으로 해결할 수 있습니다.