> 백엔드 개발 > Golang > Go MySQL 쿼리에서 SET 변수를 사용하는 방법은 무엇입니까?

Go MySQL 쿼리에서 SET 변수를 사용하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-23 17:49:02
원래의
492명이 탐색했습니다.

How to Use SET Variables in Go MySQL Queries?

SET 변수와 함께 Go MySQL 쿼리 사용

변수를 설정하고 이를 컴플렉스에서 사용하는 Go MySQL 쿼리를 작성하려고 합니다. ORDER BY 절. 쿼리는 콘솔에서 성공적으로 실행되지만 Go에서 구문 오류가 발생합니다.

가능한 해결 방법

안타깝게도 Go의 데이터베이스/sql 패키지는 현재 MySQL 사용자 설정을 지원하지 않습니다. 정의된 변수. 따라서 질문에 설명된 접근 방식은 현재 패키지의 제한 사항으로 인해 실현 가능하지 않습니다.

대체 접근 방식

동적 쿼리 생성:

한 가지 대안은 입력 매개변수를 기반으로 ORDER BY 절을 동적으로 생성하여 변수 대체의 필요성을 없애는 것입니다.

<code class="go">func (d *DB) SelectByUserId(uid string, srt string, pg, lim int) ([]Inventory, error) {
    query := `
    SELECT
        *
    FROM
        inventory
    WHERE
        user_id = ?
    ORDER BY
        ` + generateOrderBy(srt) + `
    LIMIT ?,?;
    `

    rows, err := d.Query(
        query,
        uid,
        pg*lim,
        lim,
    )

    // ... (rest of the code remains the same)

    return result, nil
}

func generateOrderBy(srt string) string {
    order := ""
    switch srt {
    case "type,asc":
        order = "`type` ASC"
    case "type,desc":
        order = "`type` DESC"
    // ... (add other cases)
    }
    return order
}</code>
로그인 후 복사

매개변수 확장:

또는 수동으로 ? 변수가 필요하지 않도록 쿼리 문자열에 자리 표시자를 추가합니다. 이 접근 방식에는 각 ?를 대체하는 문자열을 작성하는 작업이 포함됩니다. 해당 매개변수 값으로 변경하세요.

<code class="go">func (d *DB) SelectByUserId(uid string, srt string, pg, lim int) ([]Inventory, error) {
    query := fmt.Sprintf(`
    SELECT
        *
    FROM
        inventory
    WHERE
        user_id = '%s'
    ORDER BY
        CASE WHEN '%s' = 'type,asc' THEN `type` END,
        CASE WHEN '%s' = 'type,desc' THEN `type` END DESC,
        CASE WHEN '%s' = 'visible,asc' THEN visible END,
        CASE WHEN '%s' = 'visible,desc' THEN visible END DESC,
        CASE WHEN '%s' = 'create_date,asc' THEN create_date END,
        CASE WHEN '%s' = 'create_date,desc' THEN create_date END DESC,
        CASE WHEN '%s' = 'update_date,asc' THEN update_date END,
        CASE WHEN '%s' = 'update_date,desc' THEN update_date END DESC
    LIMIT %d,%d;
    `, uid, srt, srt, srt, srt, srt, srt, srt, srt, pg*lim, lim)

    rows, err := d.Query(
        query,
    )

    // ... (rest of the code remains the same)

    return result, nil
}</code>
로그인 후 복사

위 내용은 Go MySQL 쿼리에서 SET 변수를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿