Mysql: باستخدام "؟" مع الشرائح

تم إنشاؤها على ٢٢ نوفمبر ٢٠١٣  ·  5تعليقات  ·  مصدر: go-sql-driver/mysql

مثله:
حدد * من TABLE أين A IN (؟)

عندما أستخدم واجهة الاستعلام db.Query (sSql ، vArgs ...) ، كيف يتم إدخال الفقرة؟
كسلسلة مثل هذا: "أ ، ب ، ج"؟
أو كمصفوفة مثل هذا: [أ ، ب ، ج]؟
أو كشريحة مثل هذه: ["أ" ، "ب" ، "ج"]؟

كل هذا فشل ، ابكي ...

duplicate question working as intended

التعليق الأكثر فائدة

هذه نسخة مكررة من رقم 107.

هذا لن ينجح.

لا يمكن أن تتطابق A ? مع أي شيء يغير خطة تنفيذ البيان بعد تحضيره.
إليك الحالة التي لا يمكن استخدامها من أجلها (قد تكون غير مكتملة):

  • أكثر من قيمة (شرائح ، خرائط ، ...) : arrow_backward: هذا هو خطأك هنا
  • كلمات SQL
  • معرفات SQL (أسماء المخطط والجدول والأعمدة)
  • امر ترتيب

سيكون عليك إعادة كتابة استفسارك. إذا كان لديك دائمًا 3 حجج ، فافعلها
SELECT * FROM TABLE WHERE A IN (?, ?, ?) .
إذا لم يكن الأمر كذلك ، فيجب عليك إنشاء الاستعلام بناءً على عدد عناصر الشريحة أو البحث عن طريقة أخرى.

ال 5 كومينتر

هذه نسخة مكررة من رقم 107.

هذا لن ينجح.

لا يمكن أن تتطابق A ? مع أي شيء يغير خطة تنفيذ البيان بعد تحضيره.
إليك الحالة التي لا يمكن استخدامها من أجلها (قد تكون غير مكتملة):

  • أكثر من قيمة (شرائح ، خرائط ، ...) : arrow_backward: هذا هو خطأك هنا
  • كلمات SQL
  • معرفات SQL (أسماء المخطط والجدول والأعمدة)
  • امر ترتيب

سيكون عليك إعادة كتابة استفسارك. إذا كان لديك دائمًا 3 حجج ، فافعلها
SELECT * FROM TABLE WHERE A IN (?, ?, ?) .
إذا لم يكن الأمر كذلك ، فيجب عليك إنشاء الاستعلام بناءً على عدد عناصر الشريحة أو البحث عن طريقة أخرى.

مرحبًا ، شكرًا Arnehormann على إجابتك ، إذا استخدم مثل هذا "SELECT * FROM TABLE WHERE A IN (؟ ،؟ ،؟)" ، يجب أن أعرف عدد الفقرة ؛ لكن عادةً لا أعرف عدد الفقرة الموجودة ، لذلك أريد أن أستخدم في فقرة إدخال سلسلة مثل هذا: حدد * من TABLE أين A IN (؟) ، والاستعلام من سلسلة أو [] سلسلة ext.

اشكرك
ر لأجلك.

@ zhaohui-kevin ، ما لم أفقد شيئًا. أنت تعرف دائمًا عدد المعلمات لأنه يتعين عليك إما تمرير Args الفردية إلى Query() أو توسيع شريحة باستخدام s... لذلك ما عليك سوى إنشاء الاستعلام باستخدام العدد الصحيح من العناصر النائبة بناءً على تلك المعرفة http : //play.golang.org/p/mA2KwolV-n

من قراءة هذا ، لست متأكدًا مما إذا كنت تعرف ما يجب فعله الآن أم لا.
إذا كنت لا تعرف عدد المعلمات مقدمًا ، فلا يمكنك استخدام ? .

لذلك عليك أن تفعل شيئًا مثل

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

EDIT ThanksDisposaBoy ، الذي يبدو مألوفًا إلى حد ما: +1:

أعرف كيفية استخدام مثل هذا ، ولكن هذا ليس رأيي :) بأي حال من الأحوال ، شكرًا جزيلاً.

في 2013/11/22 19:06:15 ، كتب "Arne Hormann" [email protected] :

من قراءة هذا ، لست متأكدًا مما إذا كنت تعرف ما يجب فعله الآن أم لا.
إذا كنت لا تعرف عدد المعلمات مقدمًا ، فلا يمكنك استخدام؟.

لذلك عليك أن تفعل شيئًا مثل

iflen (inValues)> 0 {استعلام = "SELECT * FROM" + table + "WHERE" + عمود + "IN (؟" + strings.Repeat ("،؟"، len (inValues) -1)) + ")" .. ..}

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات