2012-04-05 6 views
2

Ich habe mehrere Prozeduren geschrieben und erfolgreich auf meinem Webhost-Server implementiert. Bei dieser Prozedur erhalte ich jedoch den Fehler # 1064. Ich habe es in MySQL Workbench geschrieben und es hat sich nicht ein wenig beschweren. Funktioniert gut auf meinem lokalen Computer.Warum ist diese MySQL-Prozedur-Syntax falsch? Funktioniert auf Testserver

USE mydb 
DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `temp`(
    IN p_page int(11), 
    IN p_approved varchar(3)) 
    BEGIN 
    DECLARE v_postsPerPage tinyint; 
    DECLARE v_totalPostCount int(11); 
    DECLARE v_listFrom int(11); 

    SELECT posts_per_page INTO v_postsPerPage FROM diskus_settings; 

    SELECT COUNT(*) INTO v_totalPostCount FROM diskus_post; 

    SET v_listFrom = p_page * v_postsPerPage - v_postsPerPage; 

    SELECT p.post_id, p.user_id, u.username, get_time_diff(p.date) as date, p.ip, p.text, p.parent_post_id, p.approved AS posts 
    FROM diskus_post p, diskus_user u 
    WHERE p.user_id = u.user_id 
     AND p.approved = p_approved 
    ORDER BY p.date DESC LIMIT v_listFrom, v_postsPerPage; 
END $$ 
+0

Wenn Sie Fehler 1064 (SQL-Syntax-Fehler), wenn es darum, sollte es Ihnen auch einen Schnipsel von SQL werden geben, von wo der Fehler aufgetreten ist. –

+0

Nahe 'v_listFrom, v_postsPerPage; END 'in Zeile 20, aber ich kann nicht sehen, warum .. – Marcus

+0

Wenn Sie Ihre Limit-Klausel dynamisch schreiben möchten, müssen Sie es als Zeichenfolge erstellen und übergeben, um vorzubereiten. MySQL> = 5.5.6 Sie können Variablen in der LIMIT-Klausel verwenden. – nnichols

Antwort

1

Dies sollte funktionieren -

USE mydb 
DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `temp`(IN p_page int(11), IN p_approved varchar(3)) 
    BEGIN 
    DECLARE v_postsPerPage tinyint; 
    DECLARE v_totalPostCount int(11); 
    DECLARE v_listFrom int(11); 

    SELECT posts_per_page INTO v_postsPerPage FROM diskus_settings; 

    SELECT COUNT(*) INTO v_totalPostCount FROM diskus_post; 

    SET v_listFrom = p_page * v_postsPerPage - v_postsPerPage; 

    SET @sql = CONCAT('SELECT p.post_id, p.user_id, u.username, get_time_diff(p.date) as date, p.ip, p.text, p.parent_post_id, p.approved AS posts 
     FROM diskus_post p, diskus_user u 
     WHERE p.user_id = u.user_id 
     AND p.approved = p_approved 
     ORDER BY p.date DESC 
     LIMIT ', v_listFrom, ', ', v_postsPerPage); 

    PREPARE stmt FROM @sql; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
END $$ 
+0

Danke, dass Sie mir einen Arbeitscode gegeben haben, der für mich leichter verständlich ist. Danke noch einmal!! – Marcus

Verwandte Themen