2

私はいくつかの手順を作成し、Web ホストのサーバーに正常に実装しました。ただし、この手順では #1064 エラーが発生します。私はMySQL Workbenchでそれを書きましたが、少しも文句を言いませんでした。ローカル マシンで正常に動作します。

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 $$
4

2 に答える 2

2

12.2.9. SELECT 構文

ストアド プログラム内では、整数値のルーチン パラメータまたはローカル変数を使用して、MySQL 5.5.6 から LIMIT パラメータを指定できます。

SP は LIMIT 句で変数を受け入れません

于 2012-04-05T22:53:56.910 に答える
1

これはうまくいくはずです-

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 $$
于 2012-04-05T22:42:28.220 に答える