php - MySQL 过程将空结果返回给 PHP

标签 php mysql stored-procedures mysqli

我有一个问题,我编写了一个存储过程,将数据插入到一堆表中,然后最后通过选择它返回和 id。当我在 PHPMyAdmin 中执行存储过程时,数据被插入并返回 ID。

当使用 MySQLi 从 PHP 执行过程时,数据被插入到表中,但是当我检查结果以检索新 id 时,结果似乎是空白的。任何帮助在这里将不胜感激。我不确定该过程在返回包含具有新 ID 的行的结果之前是否返回空结果。 phpMyAdmin 中执行结果中的空行对我来说有点麻烦?

例程执行结果sp_createEvent

事件编号
30

存储过程:

DELIMITER $$
CREATE PROCEDURE `sp_createEvent` (IN varEventName varchar(200), IN varUserID INT, IN varPrintingRequested INT, IN varEventCode BIGINT, IN varActiveFrom DATETIME, IN varActiveTo DATETIME, IN varLimitGuestPhotos BIT)
    LANGUAGE SQL
    DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT 'A procedure'
    BEGIN
    DECLARE albumname VARCHAR(50);
    DECLARE albumslug VARCHAR(50);
    DECLARE usertopalbum INT;
    DECLARE eventalbumid INT;
    DECLARE fullphotosgalleryid INT;
    DECLARE photostripgalleryid INT;
    DECLARE eventid INT;

    DECLARE CONTINUE HANDLER FOR NOT FOUND BEGIN END;

    START TRANSACTION; 

    SELECT 
        CONCAT(u.`display_name`, " - ",varEventName), 
        REPLACE(LOWER(CONCAT(RTRIM(u.`display_name`), "-",varEventName)), " ", "-"), 
        uasc.`album_id`
    INTO
        albumname,
        albumslug,
        usertopalbum
    FROM `wp_users` u
    LEFT JOIN `wp_pocketbooth_useralbumshortcode` uasc on uasc.`wp_user_id` = u.ID
    WHERE u.`ID` = varUserID and
    uasc.`album_id` is not null;

    INSERT INTO `wp_bwg_album`(`id`, `name`, `slug`, `description`, `preview_image`, `random_preview_image`, `order`, `author`, `published`) 
    VALUES (NULL,albumname,albumslug,'smartbooth.co.za Album','','','1','1','1');

    SET eventalbumid = LAST_INSERT_ID();

    INSERT INTO `wp_bwg_gallery`(`id`, `name`, `slug`, `description`, `page_link`, `preview_image`, `random_preview_image`, `order`, `author`, `published`, `gallery_type`, `gallery_source`, `autogallery_image_number`, `update_flag`) 
    VALUES (NULL, CONCAT(albumname, ' (Full Photos)'), CONCAT(albumslug, '-full-photos'),'smartbooth.co.za Gallery','','','','','1','1',1,'','12','');

    SET fullphotosgalleryid = LAST_INSERT_ID();

    INSERT INTO `wp_bwg_gallery`(`id`, `name`, `slug`, `description`, `page_link`, `preview_image`, `random_preview_image`, `order`, `author`, `published`, `gallery_type`, `gallery_source`, `autogallery_image_number`, `update_flag`) 
    VALUES (NULL, CONCAT(albumname, ' (Photo Strips)'), CONCAT(albumslug, '-photo-strips'),'smartbooth.co.za Gallery','','','','','1','1',1,'','12','');

    SET photostripgalleryid = LAST_INSERT_ID();

    INSERT INTO `wp_bwg_album_gallery`(`id`, `album_id`, `is_album`, `alb_gal_id`, `order`) 
    VALUES (NULL,eventalbumid,'0',fullphotosgalleryid,'1');

    INSERT INTO `wp_bwg_album_gallery`(`id`, `album_id`, `is_album`, `alb_gal_id`, `order`) 
    VALUES (NULL,eventalbumid,'0',photostripgalleryid,'1');

    INSERT INTO `wp_pocketbooth_events` (`eventid`, `eventname`, `printingrequested`, `printimages`, `eventcode`, `toplevelalbumid`,`activefrom`,`activeto`, `limitguestphotototime`) 
    VALUES (NULL, varEventName, varPrintingRequested, 0, varEventCode, eventalbumid, varActiveFrom, varActiveTo, varLimitGuestPhotos);

    SET eventid = LAST_INSERT_ID();

    INSERT INTO `wp_pocketbooth_eventsubscriptions` (`subscriptionid`, `userid`, `eventid`, `isowner`) 
    VALUES (NULL, varUserID, eventid, 1);

    commit;

    select eventid;

    END $$
    DELIMITER ;

PHP代码:
<?php
include 'connection.php';

$userid = $_POST['userid'];
$eventname = $_POST['eventname'];
$printingrequested = $_POST['printingrequested'];
$eventcode = $_POST['eventcode'];
$activefrom = $_POST['activefrom'];
$activeto = $_POST['activeto'];
$limitphotos = $_POST['limitphotos'];

$sql = "CALL `sp_createEvent` ('$eventname' , '$userid' , '$printingrequested' , '$eventcode' , '$activefrom' ,'$activeto', '$limitphotos');";

$res = $connection->query($sql);

if (!$res) 
{
    echo "Error: " . $sql . "<br>" . mysqli_error($connection);
}
else 
{
    $data = array();
    while($row = mysql_fetch_array($res)) {
        $data[] = $row['eventid'];
    }

    echo json_encode($data);
}



@mysqli_close($conn);

?>

最佳答案

而不是 SET eventid = LAST_INSERT_ID();

select LAST_INSERT_ID() into eventid;

关于php - MySQL 过程将空结果返回给 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39288035/

相关文章:

php - Paypal IPN - 在数据库中存储数据,更新和删除

php - $.get 没有给出错误但不起作用

javascript - 使用代码标记在 HTML 中突出显示 PHP 代码 - 错误?

php - 仅从给定字符串中删除第一个单词

mysql - 如何使用MySQL全文搜索土耳其字符?

php - 通过php将带撇号的字符串插入数据库

entity-framework - 从 EF DbContext 中逐出项目

mysql - mysql存储过程中不存在临时表

javascript - 浏览器上的敏感数据存储在哪里?

sql-server-2008 - JPA 2.0 是否支持 SQL Server 表变量?