Bagaimana untuk Menyelesaikan Ralat Sintaks dalam Pergi untuk Pertanyaan MySQL Menggunakan Pembolehubah SET?

Susan Sarandon
Lepaskan: 2024-10-24 04:33:30
asal
777 orang telah melayarinya

How to Resolve Syntax Errors in Go for MySQL Queries Using SET Variables?

Pertanyaan MySQL dengan Pembolehubah SET dalam Go

Dalam Go, anda boleh menggunakan pernyataan SET sebelum menjalankan pertanyaan MySQL. Walau bagaimanapun, terdapat keperluan sintaks tertentu yang mesti dipenuhi. Artikel ini meneroka isu yang dihadapi semasa cuba melaksanakan pertanyaan sedemikian dan menyediakan penyelesaian.

Coretan kod asal melibatkan penentuan fungsi yang memilih rekod berdasarkan ID pengguna dan parameter pengisihan. Ia menggunakan pernyataan SET untuk memberikan nilai kepada pembolehubah sebelum melaksanakan pertanyaan. Walau bagaimanapun, pendekatan ini mengakibatkan ralat sintaks apabila dijalankan melalui Go.

Ralat boleh dikaitkan dengan cara pertanyaan dibina. Khususnya, pernyataan SET perlu dirangkumkan dalam kurungan dan diletakkan sebelum pernyataan SELECT. Selain itu, MySQL DSN harus menyertakan tetapan "multiStatements=true" dan "interpolateParams=true."

Coretan kod dikemas kini berikut menyelesaikan isu:

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

    dsn := d.dsn + "?multiStatements=true&interpolateParams=true"
    db, err := sql.Open("mysql", dsn)
    if err != nil {
        return nil, err
    }
    defer db.Close()

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

    if err != nil {
        return nil, err
    }
    defer rows.Close()

    result := make([]Inventory, 0)
    for rows.Next() {
        var inv Inventory
        if err := rows.Scan(
            &inv.Id,
            &inv.UserId,
            &inv.Type,
            &inv.Name,
            &inv.Description,
            &inv.Visible,
            &inv.CreateDate,
            &inv.UpdateDate); err != nil {
            return result, err
        }
        result = append(result, inv)
    }
    if err = rows.Err(); err != nil {
        return result, err
    }

    return result, nil
}</code>
Salin selepas log masuk

Dengan melampirkan pernyataan SET dalam kurungan dan mendayakan berbilang pernyataan dan interpolasi parameter dalam DSN, pertanyaan berjaya dilaksanakan dalam Go tanpa sebarang ralat sintaks. Selain itu, menukar pangkalan data dan jadual kepada pengumpulan utf8mb4_general_ci menyelesaikan sebarang isu yang berpotensi berkaitan dengan keserasian set aksara.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Sintaks dalam Pergi untuk Pertanyaan MySQL Menggunakan Pembolehubah SET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!