mysqli 준비 문에 대해 연구하고 있었고 그것에 대해 2 가지 질문이 있습니다.mysqli 준비 문, 결과 집합을 루프하는 방법
$sql = 'SELECT image_id, filename, caption FROM images WHERE image_id = ?';
// connect to the database
$conn = ....
$stmt = $conn->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('i', $id);
$stmt->execute();
$stmt->bind_result($image_id, $filename, $caption);
// optional: get total of records in the result set
$stmt->store_result();
$numRows = $stmt->num_rows;
// loop through the result set
while ($stmt->fetch()) {
// code goes here...
}
or
// fetch the result for one record
$stmt->fetch()
// free & close
$stmt->free_result();
$stmt->close;
$conn->close();
을 여기에 내 첫 번째 질문 : 내가 읽고 있던 것처럼
, 나는 준비된 명령문의 실행 순서는 다음과 같은 것이 같은 것을 보이는 것으로 파악
그것은 또한내가 읽고 있던 것처럼,
결과를 변수에 바인드하지 않으면 $ row = $ stmt-> fetch()를 사용하고 각 변수에 $ row [ 'column_name']으로 액세스하십시오. 따라서
2 가지 방법 중 하나를 사용하여 결과 집합을 반복하는 장점/단점이 있습니까? 아무런 차이가 없다면 왜 처음에는 $ stmt-> bind_result를 사용하여 결과를 바인딩해야합니까? $ row = $ stmt-> fetch()를 대신 사용할 수 있다면 요점은 무엇입니까?
여기 내 다른 질문 :> free_result
- $ stmt-(); 정확히 무엇을 해방 하는가? prepare() 또는 store_result() 또는 else?
- $ stmt-> close; 내가 정확히 닫을 게 뭐야? stmt_init() 또는 prepare() 또는 else?
희망 답이
감사
다른 쿼리를 실행하려면 어떻게해야합니까? 메모리를 비우고 문 핸들을 열어 두시겠습니까? 또는 필자는 명령문 핸들을 닫고 $ stmt = $ conn-> stmt_init(); 명령문 핸들을 사용하여 새 명령문을 다시 열어야합니다. ? – Marco
그냥 다른 쿼리를 실행하고 닫고 무료로 아무것도하지 마십시오. 명령문에 새로운 결과를 할당하면 이전 명령문은 닫히고 자동으로 해제됩니다. – JvdBerg
오케이 그래서 더 많은 쿼리를 위해 기본적으로 bind_param, execute, bind_result를 준비해야합니다. 새로운 쿼리마다 stmt_init을 데이터베이스 연결과 마찬가지로 한 번만 호출하면됩니다. 권리? – Marco