2017-08-22 1 views
0

Ceci est ma procéduremysql procédure n'excecuting

DELIMITER // 
    CREATE PROCEDURE GET_CHECK_COURSES(IN distid int, IN `accescodeString` TEXT) 
    BEGIN 


CREATE TEMPORARY TABLE IF NOT EXISTS accesstmp (
`Id` INT NOT NULL AUTO_INCREMENT, 
`accesscode` VARCHAR(100) NOT NULL, 
PRIMARY KEY (`Id`)) ENGINE=InnoDB; 

@query = "INSERT INTO accesstmp (`accesscode`) VALUES ('",accescodeString,"')"; 

    PREPARE stmt1 FROM @query; 
    EXECUTE stmt1; 
    DEALLOCATE PREPARE stmt1; 

    @query1 = "SELECT 
    cde.code_status, 
    co.course_code, 
    co.course_name, 
    u.organization, 
    u1.email as licencinguser, 
    cul.status, 
    cul.learning_completion_date 
    FROM cdp_access_codes as cde 
    LEFT JOIN cdp_course as co ON cde.course_id = co.course_id 
    LEFT JOIN cdp_user as u ON u.user_id = cde.licensing_user_id 
    LEFT JOIN cdp_user as u1 ON u1.user_id = cde.user_id 
    LEFT JOIN cdp_accesscode_courses as cac ON cac.code_id = cde.code_id 
    LEFT JOIN cdp_user_licenses as cul ON cul.user_license_id = cac.course_subscription_id 
    JOIN accesstmp as act ON act.accesscode = cde.access_code 
    WHERE 
    cde.distributor_user_id = $distributorId 
    GROUP BY cde.access_code"; 


    PREPARE stmt2 FROM @query1; 
    EXECUTE stmt2; 
    DEALLOCATE PREPARE stmt2; 



    END // 
    DELIMITER ; 

Mais quand je l'exécution de cette i a une erreur de syntaxe

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@query = "INSERT INTO accesstmp (`accesscode`) VALUES ('",accescodeString,"')"; ' at line 10 

mes parametrs sont comme cette valeur param distid = 24 et accescodeString est strinh "mmmm, ssss, eeee"

S'il vous plaît l'un m'aident. Merci d'avance.

+0

Je ne vois pas nécessaire d'utiliser un [13,5 instruction SQL préparée Syntaxe] (https://dev.mysql.com/ doc/refman/5.7/fr/sql-syntax-prepare-statements.html) dans 'INSERT'. La variable '$ distributorId' devrait être un paramètre d'entrée. Utilisez [13.7.4 Syntaxe SET] (https://dev.mysql.com/doc/refman/5.7/fr/set-statement.html) pour affecter les [9.4 Variables définies par l'utilisateur] (https: // dev. mysql.com/doc/refman/5.7/fr/user-variables.html) ('\' @query \ '') utilisé. Utilisez la fonction ['CONCAT()'] (https://dev.mysql.com/doc/refman/5.7/fr/string-functions.html#function_concat) pour concaténer. – wchiquito

Répondre

1

Vous devez utiliser concat et set aux variables locales comme @variable:

set @query = concat("INSERT INTO accesstmp (`accesscode`) VALUES ('",accescodeString,"')"); 


-- ... 

set @query1 = "SELECT ...