PHP의 MySQLI 확장을 사용할 때 MySQLI_STMT :: $ ERROR 및 MYSQLI_STMT :: BIND_PARAM () 은 개발자가 SQL 쿼리의 오류를 효율적으로 진단하고 특히 매개 변수 결합시 오류를 만날 때 문제를 해결하는 데 도움이되는 두 가지 매우 유용한 기능입니다. 이 기사는이 두 기능을 사용하여 유형 바인딩 오류를 진단하고 해결하고 구체적인 예를 제공하는 방법을 살펴 봅니다.
mysqli_stmt :: bind_param () 함수는 변수를 SQL 문의 매개 변수 위치에 바인딩하는 데 사용됩니다. 이 기능의 공통 구문은 다음과 같습니다.
bool mysqli_stmt::bind_param ( string $types , mixed &$var , mixed &$... )
$ 유형은 SQL 쿼리의 해당 매개 변수 유형을 포함하는 문자열입니다. 예를 들어, I는 정수를 나타내고, d는 이중 정제 플로팅 포인트 번호를 나타내고, s는 문자열을 나타내고, b는 블로브 데이터 등을 나타냅니다.
다음 매개 변수는 SQL 쿼리에 바인딩 해야하는 변수이며 순서대로 $ 유형 의 유형 문자에 해당합니다.
bind_param () 가 매개 변수를 바인딩하면 유형이 일치하지 않거나 다른 오류가 발생하면 mysqli_stmt :: $ 오류 에 오류의 세부 사항이 포함됩니다. 이를 통해 문제를 신속하게 찾아 고정시키는 데 도움이 될 수 있습니다. 일반적으로 SQL이 실행될 때 오류 메시지가 반환되며 개발자는 $ stmt-> 오류를 확인하여 오류가 발생하는지 확인할 수 있습니다.
bind_param ()을 호출하고 SQL 문을 실행 한 후 오류 메시지를 받으려면 $ stmt-> 오류를 확인할 수 있습니다. 다음은 샘플 코드입니다.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?, ?)");
if (!$stmt) {
die("Statement preparation failed: " . $mysqli->error);
}
$name = "John Doe";
$age = "twenty"; // 여기 오류:age 정수 여야합니다,그러나 우리는 끈으로 지나갔습니다
// 사용 bind_param 바인딩 매개 변수
$stmt->bind_param("si", $name, $age);
if (!$stmt->execute()) {
echo "Error executing query: " . $stmt->error; // 출력 오류 메시지
} else {
echo "Record inserted successfully!";
}
$stmt->close();
$mysqli->close();
?>
위의 코드에서, 우리는 정수가 아니라 $ $ 연령을 문자열 "Twenty"로 설정합니다. 바인딩시 BIND_PARAM ()은 바인딩시 "SI"를 지정하기 때문에 유형이 일치하는지 확인합니다 ( S는 문자열을 의미하고 정수 를 의미합니다). 유형 불일치로 인해 mysqli_stmt :: $ 오류는 특정 오류 정보를 반환합니다.
일반적인 유형 바인딩 오류는 다음과 같습니다.
정수 및 문자열 바인딩 오류 : 예를 들어, 문자열은 I 유형 (적분) 위치에 바인딩됩니다.
문자열 및 숫자 바인딩 오류 : 예를 들어, 비 스트링 유형 (예 : 배열 또는 객체)이 s 유형 (String)에 바인딩됩니다.
매개 변수 누락 : 바운드 변수 수는 SQL 쿼리의 매개 변수 수와 일치하지 않습니다.
이러한 문제에 대한 해결책은 일반적으로 간단합니다. 확실하게 하다:
bind_param () 이 호출되면 매개 변수의 순서와 유형은 SQL 문의 자리 표시 자와 엄격하게 일치합니다.
올바른 데이터 유형을 사용하십시오. 예를 들어, 유형 I은 정수를 바인딩해야하며, 유형 은 문자열을 바인딩해야합니다.
Var_Dump () 와 같은 디버깅 도구를 사용하여 SQL 쿼리를 실행하기 전에 타입 불일치 문제가 없는지 확인하기 전에 바운드 변수 유형을 확인할 수도 있습니다.
mysqli_stmt :: $ error 및 mysqli_stmt :: bind_param () 은 개발자가 SQL 쿼리의 유형 바인딩 오류를보다 쉽게 진단하고 해결하는 데 도움이되는 매우 강력한 디버깅 도구입니다. 실제 발전에서,이 두 기능의 합리적인 사용은 오류 감지 효율을 크게 향상시키고 잠재적 버그를 줄일 수 있습니다. 매개 변수 유형이 일치하도록함으로써 일반적인 결합 오차를 효과적으로 피하고 SQL 쿼리가 정상적으로 실행됩니다.