Rumah > pembangunan bahagian belakang > Golang > Bolehkah Anda Melaksanakan Pertanyaan MySQL dengan Pembolehubah SET apabila Menggunakan Kaedah Pertanyaan() Go?

Bolehkah Anda Melaksanakan Pertanyaan MySQL dengan Pembolehubah SET apabila Menggunakan Kaedah Pertanyaan() Go?

Susan Sarandon
Lepaskan: 2024-10-24 02:37:02
asal
431 orang telah melayarinya

Can You Execute MySQL Queries with SET Variables when Using Go's Query() Method?

Pertanyaan MySQL dengan SET Pembolehubah dalam Go

Latar Belakang:

Pengguna cuba untuk laksanakan pertanyaan MySQL yang kompleks menggunakan Go yang melibatkan penetapan pembolehubah pengguna sebelum menjalankan pertanyaan. Pertanyaan berjaya dilaksanakan daripada konsol, tetapi ia gagal dengan ralat sintaks apabila dijalankan melalui Go. Pengguna mempersoalkan kemungkinan menggunakan pembolehubah SET dengan kaedah Go's Query() .

Penyelesaian:

Isu pengguna telah diselesaikan dengan membuat pengubahsuaian berikut:

  1. Konfigurasi DSN:

    • Tambah ?multiStatements=true&interpolateParams=true kepada DSN yang digunakan semasa menyambung ke pangkalan data. Ini membenarkan pelaksanaan berbilang pernyataan dalam satu panggilan dan membolehkan interpolasi parameter.
  2. Penukaran Pangkalan Data dan Jadual:

    • Menukar pangkalan data dan jadual yang berkaitan kepada pengumpulan utf8mb4_general_ci. Ini menyelesaikan ralat yang berkaitan dengan ketidakpadanan penyusunan.

Kod:

Dengan pengubahsuaian ini, kod yang disediakan oleh pengguna harus berfungsi seperti yang dijangkakan:

<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 ?,?;
    `

    rows, err := d.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 mengubah suai konfigurasi DSN dan menukar pangkalan data dan jadual kepada penyusunan yang sesuai, pengguna boleh berjaya melaksanakan pertanyaan yang dipersoalkan sambil mengelakkan ralat sintaks.

Atas ialah kandungan terperinci Bolehkah Anda Melaksanakan Pertanyaan MySQL dengan Pembolehubah SET apabila Menggunakan Kaedah Pertanyaan() Go?. 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