현재 위치: > 최신 기사 목록> mysqli_stmt :: $ error_list를 사용하여 MySQL 쿼리 구문 오류를 디버깅하기위한 실질적인 팁은 무엇입니까?

mysqli_stmt :: $ error_list를 사용하여 MySQL 쿼리 구문 오류를 디버깅하기위한 실질적인 팁은 무엇입니까?

gitbox 2025-09-17
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
실제 개발에서,우리는 종종 만난다 MySQL 쿼리 실행이 실패했습니다,특히 전처리 문을 사용할 때(Prepared Statements)시간。하지만 mysqli 제공 error 그리고 errno 오류 정보를 얻는 속성,그러나 이것들은 일반적으로 오류 만 반환합니다。더 자세히 알고 싶다면、구조화 된 오류 메시지,mysqli_stmt::$error_list 매우 유용한 도구입니다。

------------------------------------------------------------
*/</span>

</span><span><span class="hljs-comment"># 사용 mysqli_stmt::$error_list 지휘하다 MySQL 구문 오류를 디버깅하기위한 실질적인 팁은 무엇입니까??</span></span><span>

在사용 PHP ~의 mysqli 扩展지휘하다数据库操作시간,`mysqli_stmt::</span><span><span class="hljs-variable">$error_list</span></span><span>` 属性能够为开发者提供一个包含所有错误信息~의数组。이것은 디버그에 복잡합니다 SQL 查询시간尤其有帮助,첫 번째 오류 만 포함 할뿐만 아니라,还会列出执行过程中出现~의所有错误细节。

</span><span><span class="hljs-comment">### 1. `mysqli_stmt::$error_list` ~의返回结构</span></span><span>

`</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;error_list` 배열이 반환됩니다,其中~의每个元素都是一个关联数组,다음 주요 값을 포함합니다:
- **errno**:오류 코드
- **sqlstate**:SQLSTATE 标准化오류 코드
- **error**:错误~의详细描述

예제 반환 값:
```php
[
    [
        </span><span><span class="hljs-string">"errno"</span></span><span> =&gt; </span><span><span class="hljs-number">1064</span></span><span>,
        </span><span><span class="hljs-string">"sqlstate"</span></span><span> =&gt; </span><span><span class="hljs-string">"42000"</span></span><span>,
        </span><span><span class="hljs-string">"error"</span></span><span> =&gt; </span><span><span class="hljs-string">"You have an error in your SQL syntax; ..."</span></span><span>
    ]
]
</span></span>

2. 일반적인 사용 시나리오

디버깅 프로세스 동안, 특히 SQL 문이 길거나 다중 매개 변수 바인딩이 포함 된 경우, 단일 $ STMT-> 오류는 종종 문제를 찾기에 충분하지 않습니다. 현재 $ stmt-> erry_list를 통과하여 모든 오류 메시지를 한 번에 볼 수 있습니다.

샘플 코드 :

 <span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"pass"</span></span><span>, </span><span><span class="hljs-string">"test"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = ?"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stmt</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Prepare failed: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error);
}

</span><span><span class="hljs-variable">$id</span></span><span> = </span><span><span class="hljs-string">"abc"</span></span><span>; </span><span><span class="hljs-comment">// 의도적으로 오류 유형을 통과했습니다</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"i"</span></span><span>, </span><span><span class="hljs-variable">$id</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;error_list) {
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;error_list </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$err</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Error Code: <span class="hljs-subst">{$err['errno']}</span></span></span><span>\n";
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"SQLSTATE: <span class="hljs-subst">{$err['sqlstate']}</span></span></span><span>\n";
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Message: <span class="hljs-subst">{$err['error']}</span></span></span><span>\n\n";
    }
}

</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span></span>

3. 제안 디버깅

  1. 개발 환경에서 활성화 <br> 개발 또는 디버그 모드에서만 세부 오류 정보 출력을 사용하여 생산 환경에서 데이터베이스 구조 또는 민감한 정보를 피하십시오.

  2. 로깅과 결합 <br> 더 쉬운 후속 분석 및 문제 추적을 위해 로그 파일에 $ stmt-> error_list 출력을 쓰기

  3. sqlstate 비교 표 <br>과 협력하십시오 SQLState 코드에 따라 문제 유형을 신속하게 찾으십시오 (동기화 오류, 불충분 한 권한, 연결 방해 등).

4. 요약

기존 $ STMT-> 오류 와 비교하여 MySQLI_STMT :: $ ERROR_LIST는 특히 복잡한 쿼리 및 전처리 문을 디버깅 할 때 더 풍부한 오류 세부 정보를 제공하여 문제 위치 효율성을 크게 향상시킬 수 있습니다. 올바르게 사용하면 SQL 구문 오류 및 실행 문제를보다 빠르고 정확하게 해결하는 데 도움이됩니다.

 <span></span>