Mysql: Menggunakan `?` Dengan irisan

Dibuat pada 22 Nov 2013  ·  5Komentar  ·  Sumber: go-sql-driver/mysql

Seperti ini:
PILIH * DARI TABEL DI MANA A IN (?)

ketika saya menggunakan antarmuka kueri db.Query (sSql, vArgs ...), hwo untuk input para?
sebagai string seperti ini: "a, b, c"?
atau sebagai array seperti ini: [a, b, c]?
atau sebagai potongan seperti ini: ["a", "b", "c"]?

itu semua gagal, menangis ...

duplicate question working as intended

Komentar yang paling membantu

Ini adalah duplikat dari # 107.

Itu tidak akan berhasil.

A ? tidak bisa cocok dengan apapun yang mengubah rencana eksekusi pernyataan setelah itu disiapkan.
Berikut adalah kasus yang tidak dapat digunakan untuk (mungkin tidak lengkap):

  • lebih dari satu nilai (irisan, peta, ...) : arrow_backward: ini adalah kesalahan Anda di sini
  • Kata kunci SQL
  • Pengidentifikasi SQL (skema, tabel dan nama kolom)
  • tata urutan

Anda harus menulis ulang kueri Anda. Jika Anda selalu memiliki 3 argumen, lakukanlah
SELECT * FROM TABLE WHERE A IN (?, ?, ?) .
Jika tidak, Anda harus membuat kueri bergantung pada jumlah elemen potongan atau mencari pendekatan lain.

Semua 5 komentar

Ini adalah duplikat dari # 107.

Itu tidak akan berhasil.

A ? tidak bisa cocok dengan apapun yang mengubah rencana eksekusi pernyataan setelah itu disiapkan.
Berikut adalah kasus yang tidak dapat digunakan untuk (mungkin tidak lengkap):

  • lebih dari satu nilai (irisan, peta, ...) : arrow_backward: ini adalah kesalahan Anda di sini
  • Kata kunci SQL
  • Pengidentifikasi SQL (skema, tabel dan nama kolom)
  • tata urutan

Anda harus menulis ulang kueri Anda. Jika Anda selalu memiliki 3 argumen, lakukanlah
SELECT * FROM TABLE WHERE A IN (?, ?, ?) .
Jika tidak, Anda harus membuat kueri bergantung pada jumlah elemen potongan atau mencari pendekatan lain.

Hai Arnehormann terima kasih atas jawaban Anda, jika menggunakan seperti ini "SELECT * FROM TABLE WHERE A IN (?,?,?)", Saya harus tahu berapa banyak para; Tapi biasanya saya tidak tahu ada berapa banyak, jadi saya ingin menggunakan para input string seperti ini: SELECT * FROM TABLE WHERE A IN (?), dan query dari string atau [] string ext.

Terima kasih
br untukmu.

@ zhaohui-kevin, kecuali saya melewatkan sesuatu. Anda _selalu_ tahu berapa banyak parameter yang ada karena Anda harus meneruskan argumen individu ke Query() atau memperluas sepotong dengan s... jadi buat saja kueri dengan jumlah placeholder yang benar berdasarkan pengetahuan itu http : //play.golang.org/p/mA2KwolV-n

Dari membaca ini, saya tidak yakin apakah Anda tahu apa yang harus dilakukan sekarang atau tidak.
Jika sebelumnya Anda tidak mengetahui jumlah parameternya, Anda tidak dapat menggunakan ? .

Jadi, Anda perlu melakukan sesuatu seperti

if len(inValues) > 0 {
    query = "SELECT * FROM " + table + " WHERE " + column +
        " IN (?" + strings.Repeat(",?", len(inValues)-1)) + ")"
    ....
}

EDIT Terima kasih @DisposaBoy , sepertinya sudah tidak asing lagi: +1:

Saya tahu bagaimana menggunakan seperti ini, tapi itu bukan pikiran saya :) Bagaimanapun, terima kasih banyak.

Pada 2013-11-22 19:06:15, "Arne Hormann" [email protected] menulis:

Dari membaca ini, saya tidak yakin apakah Anda tahu apa yang harus dilakukan sekarang atau tidak.
Jika Anda tidak mengetahui jumlah parameter sebelumnya, Anda tidak dapat menggunakan?.

Jadi, Anda perlu melakukan sesuatu seperti

iflen (inValues)> 0 {query = "SELECT * FROM" + table + "WHERE" + kolom + "IN (?" + strings.Repeat (",?", len (inValues) -1)) + ")" .. ..}

-
Balas email ini secara langsung atau lihat di GitHub.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat