سؤال

على مدار اليومين الماضيين، حاولت كتابة إجراء مخزن في MySQL ولدي بعض مزدوجة الحصول عليها للعمل. آمل أن يكون شخص ما هنا أعطني بعض المدخلات :)

المثال الأول المنشور مخصص عضوية ASP.NET لإنشاء مستخدم جديد. أتوقع إرسال بريد إلكتروني وكلمة مرور إلى DB واحصل على عودة Int للتحقق من كتابة المستخدمين إلى DB.

يمكنني استخدام MySQL DB 5.1 (أعتقد) واكتب SQL إلى Webinterface.

حصلت على 2 سروال، هل يمكن لشخص ما أن يفسر ذلك أيضا :): 1) أنا استخدم محدد، لكن لا أعرف ما يفعله. 2) لست متأكدا مما إذا كان عليك القيام بأشياء أخرى، ثم اضبط AutoCommit = 0 للحصول على المعاملات للعمل، أو إذا كان لدي حتى أن أفعل ذلك.

أعلم أنه كان بإمكاني استخدام عبارة IF / وإلا بدلا من المعاملة، ولكن أود أن أفعل ذلك مع واحد لمعرفة كيفية عمله. (أتوقع استخدامه كثيرا)

الرمز الذي لا أستطيع الوصول إليه:

DELIMITER //

CREATE DEFINER=`websharp_dk`@`%` PROCEDURE `CreateUser`(
    IN _username VARCHAR(100),
    IN _Password VARCHAR(100))
    RETURNS INT

    BEGIN
    SET autocommit = 0;
    DECLARE return_value INT;

    BEGIN TRY
        START TRANSACTION
                INSERT INTO User 
                (Email
                ,Password
                ,Failed_Password_Count
                ,Creation_Date)
                VALUES
                (_username
                ,_Password
                ,0
                ,Datetime.Now())
            SET return_value = 1;
        COMMIT;
    END TRY

    BEGIN CATCH
        ROLLBACK
        SET return_value = 0;
    END CATCH

    BEGIN FINALLY
    RETURN return_value;
    END FINALLY 
    END//
DELIMITER ;

تحرير: رسالة الخطأ أحصل عليه هو:

1064 - لديك خطأ في بناء جملة SQL الخاص بك؛ حدد الدليل الذي يتوافق مع إصدار خادم MySQL الخاص بك للحصول على بناء الجملة الصحيح لاستخدامه بالقرب من "Int Beving Set Autocommit = 0؛ يعلن العائد_Value int؛ في الخط 4

لا يوجد حل صحيح

نصائح أخرى

للحصول على دعم المعاملات، تأكد من أنك تستخدم محرك تخزين InnoDB بدلا من MyISAM الافتراضي.

فيما يتعلق به هذا القانون نفسه، سيكون سؤالي الأول، لماذا تتغلب على هذا الاستعلام الفردي في المعاملة؟ أيضا، ما هي الأخطاء التي تراها؟

يعيد تحديد محدد أي تسلسل الأحرف التي تستخدمها لإنهاء عبارة SQL. إن إجراء إنشاء كامل هو عبارة واحدة كبيرة وتحتاج إلى إخبار MySQL حيث ينتهي بشيء (سيكون عادة "؛"). ولكن نظرا لأن لديك مجموعة من البيانات الأخرى في "الجسم" (بين البداية والنهاية) من عبارة إنشاء إجراءات إنشاء كل ما يجب انتهاء منه أيضا، فأنت بحاجة إلى إعادة تعريف المحدد حتى لا تنهي بيان إنشاء الإجراء في أول '؛'.

دون إعادة تعريف محدد، تعتقد MySQL أن عبارة إنشاء إجراءات إنشاء تبدو وكأنها وكأنها ثم تبدأ بيان جديد:

CREATE DEFINER=`websharp_dk`@`%` PROCEDURE `CreateUser`(
    IN _username VARCHAR(100),
    IN _Password VARCHAR(100))
    RETURNS INT

    BEGIN
    SET autocommit = 0;

باستخدام محدد؛ في نهاية البرنامج النصي يغير المحدد إلى "؛" وليس هناك حاجة رغم أنه من الممارسات الجيدة أن تفعل ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top