programing

결과가 있어야 할 경우 PHP MySQL Query of View가 0 결과를 반환합니다.

randomtip 2022. 12. 21. 22:50
반응형

결과가 있어야 할 경우 PHP MySQL Query of View가 0 결과를 반환합니다.

저는 PHP 5.6을 실행하고 있는 사이트를 가지고 있습니다.이 사이트의 데이터베이스는 최근에 MySQL 5.1에서 MariaDB 10.0(MySQL 5.5 호환)으로 업그레이드되었으며, 이제 내 사이트의 쿼리가 작동하지 않습니다(MySQL 5.1 데이터베이스에 연결할 때 오류 없이 작동합니다).

이 데모에서는 "id"(정수) 및 "page_title"(var_char) 필드가 있는 "content"(콘텐츠)라는 데이터베이스 테이블이 있습니다.이 표에는 ID가 1인 행과 "테스트 1"인 page_title, 두 번째 행의 ID가 2이고 page_title이 "테스트 2"로 설정된 행이 있습니다.

그런 다음 phpMyAdmin 내부에 다음 쿼리를 사용하여 이 테이블의 뷰를 만들었습니다.

select `content`.`id` AS `id`,`content`.`page_title` AS `page_title` from `content`

phpMyAdmin의 뷰에 있는 컨텐츠 테이블에서 뷰와 양쪽 행을 볼 수 있습니다.

제 PHP 페이지에는 객체 지향 스타일 쿼리가 있습니다.이 코드는 다음과 같습니다.

<?php
try {
require_once 'Connections/dbconn.php';
$sql = "SELECT id, page_title FROM v_content WHERE id = 1 LIMIT 1";
$stmt = $db->stmt_init();
if (!$stmt->prepare($sql)) {
    $error = $stmt->error;
} else {
    $stmt->bind_result($id, $page_title);
    $stmt->execute();
    $stmt->store_result();
    $stmt->fetch();
}
} catch (Exception $e) {
$error = $e->getMessage();
}?>

이 쿼리는 다음을 반환합니다.문과 연결된 결과 집합이 없는 동안 행 읽기 시도

VIEW "v_content"에서 "content"로만 테이블을 변경하면 결과가 반환됩니다.또한 동일한 쿼리(VIEW v_content 쿼리)를 사용하여 MySQL 5.1 데이터베이스에 연결하면 결과가 반환됩니다.쿼리를 복사하여 phpMyAdmin에 붙여넣고 결과를 반환받았으며 MySQL 5.1 데이터베이스에서도 동일한 코드를 사용하여 결과를 반환했기 때문에 쿼리 자체에 문제가 없다는 것을 알고 있습니다.에러 로그를 확인했지만, 에러는 표시되지 않습니다.

뷰에서 0개의 결과를 얻을 수 있었던 이유가 뭔지 아는 사람?

실제 사이트 코딩에는 문제가 없었던 것 같습니다.주최측으로부터 다음과 같은 설명을 들었습니다.

준비된 문이 뷰에서 잘못 작동하는 문제는 새로운 마리아 데이터베이스 서버의 table_definition_cache 크기와 관련이 있는 것으로 보입니다.이것은 글로벌 설정입니다.기본적으로 캐시에 들어가는 테이블의 수가 이 값을 초과하면 오래된 엔트리가 캐시에서 플러시되기 시작합니다.문이 준비되었지만 준비된 문이 실행되기 전에 table_definition_cache에서 엔트리가 이탈한 경우 해당 엔트리는 "비활성"으로 간주되어 다시 준비해야 합니다.이 값은 글로벌 값이기 때문에 다른 테이블에 액세스하면 카운터가 리셋될 수 있습니다.그 결과 모든 데이터베이스 서버에서 table_definition_cache 값을 훨씬 높은 값으로 증가시켜 문제를 해결했습니다.

실행 장소와 바인딩 장소만 바꾸면 될 것 같아요.

...
} else {
    $stmt->execute();
    $stmt->bind_result($id, $page_title);
    $stmt->store_result();
    $stmt->fetch();
}
...

언급URL : https://stackoverflow.com/questions/33485149/php-mysql-query-of-view-returns-0-results-when-there-should-be-a-result

반응형