루프에서 일부 쿼리는 성공하고 다른 쿼리는 '선택된 데이터베이스 없음'이 실패합니다.

표식이있는

동일한 2 개의 쿼리를 3 개의 테이블에 적용하므로 루프를 반복하고 테이블 이름을 대체합니다. 첫 번째 INSERT 쿼리는 항상 테스트 서버와 프로덕션에서 작동합니다. 두 번째 DELETE 쿼리는 두 개의 다른 테스트 서버에서 작동하지만 프로덕션에서 실패하고 mysql 오류 1046 No database selected가 발생합니다.

영향을받는 코드 추출 :

    $queries = array(
        "INSERT INTO knd_bkg.@table@
            SELECT DISTINCT SQL_NO_CACHE
            B.ASIN, Author, Title, EditorialReview, DetailPageURL, current_price, salesrank, number_reviews, erotica, G.BrowseNodeId, price_salesrank_checked_on
            FROM bkd_books.club_books B
            USE INDEX (free_quality)
            RIGHT JOIN bkd_books.book_genre G on G.ASIN=B.ASIN
            WHERE EXISTS
            (
              SELECT 1 FROM knd_bkg.genres K WHERE K.browsenode=G.BrowseNodeId
            )
            AND @priceWhere@
            AND price_salesrank_checked_on > '@newerThan@'
            AND B.number_reviews >= 4
            AND B.rating >= 4.0
            AND B.language = 'english'
            AND B.hide_knd=0
            AND B.public_domain=0;",
        "DELETE T FROM knd_bkg.@table@ T
         INNER JOIN
         (
             SELECT N.* FROM knd_bkg.@table@ N
             INNER JOIN
             (
                 SELECT DISTINCT ASIN, BrowseNodeId FROM knd_bkg.@table@
                 INNER JOIN knd_bkg.genres ON knd_bkg.genres.browsenode=knd_bkg.@[email protected]
                 WHERE isFiction=1
             ) F
             ON F.ASIN=N.ASIN
             INNER JOIN knd_bkg.genres
             ON knd_bkg.genres.browsenode=N.BrowseNodeId
             WHERE knd_bkg.genres.isNonFiction=1
         ) D
         USING (ASIN, BrowseNodeId)
         WHERE D.ASIN=T.ASIN AND D.BrowseNodeId=T.BrowseNodeId"
    );

    $tables = array(
        "free_books" => array('priceWhere' => "B.current_price = 0", 'timePeriod' => $freeTimePeriod),
        "99_books" => array('priceWhere' => "B.current_price > 0 AND B.current_price < 100", 'timePeriod' => $paidTimePeriod),
        "399_books" => array('priceWhere' => "B.current_price >= 100 AND B.current_price < 400", 'timePeriod' => $paidTimePeriod),
    );

    connectSlaveDB();

    foreach ($tables as $table => $data) {
        $newerThan = date("Y-m-d H:i:s", strtotime("-" . $data['timePeriod'] . " hours"));
        foreach ($queries as $query) {
            $query = str_replace('@table@', $table, $query);
            $query = str_replace('@newerThan@', $newerThan, $query);
            $query = str_replace('@priceWhere@', $data['priceWhere'], $query);
            Logger::_write(LOG_VERBOSE, "API - api/bkg/rebuild query: $query");
            $result = mysql_query($query);
            if (!$result) {
                Logger::_write(LOG_ERR, "API - api/bkg/rebuild FAILED: " . mysql_error());
                $success = false;
            } else {
                Logger::_write(LOG_VERBOSE, "API - api/bkg/rebuild SUCCESS");
            }
        }
    }

그리고 connectSlaveDB ()

function connectSlaveDB()
{
    global $dbSlave, $dbUser, $dbPass, $dbName;
    $connSlave = mysql_connect($dbSlave, $dbUser, $dbPass, TRUE);
    if (!$connSlave) {
        Logger::_write(LOG_CRIT, "Unable to connect to slave DB");
        include 'screens/error.inc.php';
        exit();
   }
    mysql_set_charset('utf8', $connSlave);
    mysql_select_db($dbName, $connSlave);
    return TRUE;
}

테이블은 MEMORY 테이블이지만 MYISAM과 프로덕션에서만 동일한 오류가 발생합니다. 이 쿼리는 복제 슬레이브에서 실행되고 마스터를 포함하지 않지만 이전 코드는 테이블을 TRUNCATES 때문에 권한이 있다고 생각하지 않습니다. 로그 파일에서 쿼리를 가져 오면 phpMyAdmin에서 제대로 작동합니다. 그리고 테스트 서버에서는 괜찮습니다.

1046 No database selected 오류에 대한 이유를 알 수 없습니다. 그리고 3 시간 후에는 정말 분명한 것을 놓칠 수 있습니다. 특히 하나의 DB 연결에 대한 실패 패턴은 다음과 같습니다.

INSERT on free_books - success
DELETE on free_books - fail
INSERT on 99_books - success
DELETE on 99_books - fail
INSERT on 399_books - success
DELETE on 399_books - fail

추악한 전역과 더 이상 사용되지 않는 mysql * 함수를 용서하십시오. 이것은 다소 오래된 레거시 앱입니다. 알아...

애니 겔

DELETE 쿼리 구문으로 인해 문제가 발생할 수 있습니다.

DELETE T FROM

나는 이것이 mysql 버그로 인해 때때로 UPDATE 쿼리에 문제를 일으킨다는 것을 알고 있습니다.

T참조 를 피하기 위해 쿼리를 다시 작성 하면이 문제가 해결됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

두 번째 및 다음 쿼리에서 "선택된 데이터베이스 없음"-PHP-MySQL

분류에서Dev

서로 다른 데이터베이스에서 서로 다른 쿼리 계획을 생성하는 동일한 postgres 쿼리

분류에서Dev

다중 선택이있는 Android 데이터베이스 쿼리

분류에서Dev

MySQL 하위 쿼리 또는 데이터베이스 이름이 기본 쿼리의 결과 집합에있는 다른 데이터베이스 조인

분류에서Dev

mysql 조인 쿼리. 그러나 일부 데이터에는 결합 된 데이터가 없습니다.

분류에서Dev

다른 선택 변경에 의해 트리거 된 데이터베이스의 쿼리 후 선택 값 변경

분류에서Dev

하나의 쿼리 Access 데이터베이스에 다른 필드가있는 두 개의 다른 테이블에서 열 선택

분류에서Dev

동일한 MySQL 데이터베이스에서 동일한 쿼리를 실행하는 데 다른 시간이 걸립니다.

분류에서Dev

MYSQL은 테이블이 아닌 두 개의 쿼리에서 일치하는 레코드 만 선택한 다음 B 쿼리로 결과를 정렬합니다.

분류에서Dev

bash에서 명령 줄에 전달 된 파일의 FOR 루프 내부에 공백이있는 파일을 처리하는 것이 실패합니다.

분류에서Dev

foreach 루프의 데이터베이스에서 데이터를 선택하는 것은 항상 7입니다.

분류에서Dev

ODBC를 통해 데이터베이스에 연결된 R에서 이전 쿼리를 취소하지 않고 다른 쿼리를 보내기 위해 한 쿼리를 실행 한 후 연결을 끊는 방법은 무엇입니까?

분류에서Dev

JOIN 쿼리는 실제 데이터베이스에서 너무 느리고 작은 데이터베이스에서는 잘 실행됩니다.

분류에서Dev

사용자가 공개 BigQuery 데이터베이스를 쿼리하는 경우 데이터 소유자는 실행 된 쿼리를 볼 수 있습니다.

분류에서Dev

데이터베이스에서 데이터를 가져 오는 동안 선택 쿼리가 작동하지 않습니다.

분류에서Dev

오늘 날짜와 7 일 사이에있는 sqlite 데이터베이스의 행을 선택하는 쿼리

분류에서Dev

DAO가 있고 선택 쿼리에서 값을 검색하고 있습니다. mysql의 데이터베이스에서 인쇄하는 방법

분류에서Dev

SQL 쿼리-내부 조인이있는 다른 데이터베이스

분류에서Dev

다른 테이블에없는 한 테이블에서 행을 선택하는 SQL 쿼리

분류에서Dev

Entity Framework는 이미 실행 된 쿼리에 대해 데이터베이스 쿼리를 다시 실행합니까?

분류에서Dev

PHP PDO는 지원하는 12 개의 다른 데이터베이스에 대해 동일한 쿼리 구문을 사용합니까?

분류에서Dev

쿼리를 다루는 데이터베이스

분류에서Dev

다른 유사한 데이터베이스에서 한 데이터베이스의 테이블에 누락 된 열을 추가하기위한 쿼리 작성

분류에서Dev

단일 열 데이터베이스 값을 배열에 배치 한 다음 다른 쿼리에서 호출

분류에서Dev

내 데이터베이스에 쿼리하려는 데이터가 있어도 sqlite 데이터베이스를 쿼리하고 결과를 [] (비어 있음)로 얻었습니다.

분류에서Dev

PR에 일부 커밋을 스쿼시 한 다음 마스터로 리베이스하는 것이 문제입니까?

분류에서Dev

처리되지 않은 거부 SequelizeConnectionError를 수정하는 방법 : 선택된 데이터베이스 없음

분류에서Dev

선택된 데이터베이스가 없다고 말하는 이유는 무엇입니까?

분류에서Dev

목록에서 데이터베이스를 선택한 다음 PHP에서 쿼리

Related 관련 기사

  1. 1

    두 번째 및 다음 쿼리에서 "선택된 데이터베이스 없음"-PHP-MySQL

  2. 2

    서로 다른 데이터베이스에서 서로 다른 쿼리 계획을 생성하는 동일한 postgres 쿼리

  3. 3

    다중 선택이있는 Android 데이터베이스 쿼리

  4. 4

    MySQL 하위 쿼리 또는 데이터베이스 이름이 기본 쿼리의 결과 집합에있는 다른 데이터베이스 조인

  5. 5

    mysql 조인 쿼리. 그러나 일부 데이터에는 결합 된 데이터가 없습니다.

  6. 6

    다른 선택 변경에 의해 트리거 된 데이터베이스의 쿼리 후 선택 값 변경

  7. 7

    하나의 쿼리 Access 데이터베이스에 다른 필드가있는 두 개의 다른 테이블에서 열 선택

  8. 8

    동일한 MySQL 데이터베이스에서 동일한 쿼리를 실행하는 데 다른 시간이 걸립니다.

  9. 9

    MYSQL은 테이블이 아닌 두 개의 쿼리에서 일치하는 레코드 만 선택한 다음 B 쿼리로 결과를 정렬합니다.

  10. 10

    bash에서 명령 줄에 전달 된 파일의 FOR 루프 내부에 공백이있는 파일을 처리하는 것이 실패합니다.

  11. 11

    foreach 루프의 데이터베이스에서 데이터를 선택하는 것은 항상 7입니다.

  12. 12

    ODBC를 통해 데이터베이스에 연결된 R에서 이전 쿼리를 취소하지 않고 다른 쿼리를 보내기 위해 한 쿼리를 실행 한 후 연결을 끊는 방법은 무엇입니까?

  13. 13

    JOIN 쿼리는 실제 데이터베이스에서 너무 느리고 작은 데이터베이스에서는 잘 실행됩니다.

  14. 14

    사용자가 공개 BigQuery 데이터베이스를 쿼리하는 경우 데이터 소유자는 실행 된 쿼리를 볼 수 있습니다.

  15. 15

    데이터베이스에서 데이터를 가져 오는 동안 선택 쿼리가 작동하지 않습니다.

  16. 16

    오늘 날짜와 7 일 사이에있는 sqlite 데이터베이스의 행을 선택하는 쿼리

  17. 17

    DAO가 있고 선택 쿼리에서 값을 검색하고 있습니다. mysql의 데이터베이스에서 인쇄하는 방법

  18. 18

    SQL 쿼리-내부 조인이있는 다른 데이터베이스

  19. 19

    다른 테이블에없는 한 테이블에서 행을 선택하는 SQL 쿼리

  20. 20

    Entity Framework는 이미 실행 된 쿼리에 대해 데이터베이스 쿼리를 다시 실행합니까?

  21. 21

    PHP PDO는 지원하는 12 개의 다른 데이터베이스에 대해 동일한 쿼리 구문을 사용합니까?

  22. 22

    쿼리를 다루는 데이터베이스

  23. 23

    다른 유사한 데이터베이스에서 한 데이터베이스의 테이블에 누락 된 열을 추가하기위한 쿼리 작성

  24. 24

    단일 열 데이터베이스 값을 배열에 배치 한 다음 다른 쿼리에서 호출

  25. 25

    내 데이터베이스에 쿼리하려는 데이터가 있어도 sqlite 데이터베이스를 쿼리하고 결과를 [] (비어 있음)로 얻었습니다.

  26. 26

    PR에 일부 커밋을 스쿼시 한 다음 마스터로 리베이스하는 것이 문제입니까?

  27. 27

    처리되지 않은 거부 SequelizeConnectionError를 수정하는 방법 : 선택된 데이터베이스 없음

  28. 28

    선택된 데이터베이스가 없다고 말하는 이유는 무엇입니까?

  29. 29

    목록에서 데이터베이스를 선택한 다음 PHP에서 쿼리

뜨겁다태그

보관