-1

INTEGER (IN p_user_id INTEGER) 型の IN パラメータを持つ MySQL ストアド ルーチンがあります。ユーザーが新しいユーザーを作成している場合は、p_user_id を '' として渡します。ユーザーがユーザーを更新している場合は、編集中のユーザーの user_id を渡します。これに関する私の問題は、 p_user_id が '' として入ってくると、それが 0 に変換されることです。PHP が値を MySQL に送信する直前にユーザー ID をダンプし (値は '')、それを正しくダンプしました。 MySQL ルーチンの開始時に p_user_id が 0 になりました。p_user_id IN パラメータを NULL にできるように、これを処理する方法についての洞察を得ることができますか? 前もって感謝します!

PHP コード:

<?php 
session_start();

$functionCalled = $_GET['function'];

function userMaintMerge()
{   
    $userMaintUserId = $_GET['userMaintUserId'];
    $userMaintStep = $_GET['userMaintStep'];
    $userMaintFirstName = $_GET['userMaintFirstName'];
    $userMaintMI = $_GET['userMaintMI'];
    $userMaintLastName = $_GET['userMaintLastName'];
    $userMaintUserType = $_GET['userMaintUserType'];
    $userMaintSchoolId = $_GET['userMaintSchoolId'];
    $userMaintGrade = $_GET['userMaintGrade'];
    $userMaintLogin = $_GET['userMaintLogin'];
    $userMaintLogin = $_GET['userMaintPassword1'];

    $mysqli = new mysqli($_SESSION['dbaddress'],$_SESSION['user'],$_SESSION['dbpword'],$_SESSION['database']);
    if ($mysqli->connect_errno) 
    {
        echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }
    if (!$SelectUser = $mysqli->query("call MergeUser('$userMaintUserId','$userMaintStep','$userMaintFirstName','$userMaintMI','$userMaintLastName','$userMaintUserType','$userMaintSchoolId','$userMaintGrade','$userMaintLogin','$userMaintPassword1',@error)")) 
    {
        echo "CALL failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }
}
?>

MySQL ストアド ルーチン:

CREATE DEFINER=`root`@`localhost` PROCEDURE `MergeUser`(IN  p_user_id      INTEGER
,IN  p_step         VARCHAR(10)
,IN  p_first_name   VARCHAR(100)
,IN  p_mi           VARCHAR(5)
,IN  p_last_name    VARCHAR(100)
,IN  p_user_type    INTEGER
,IN  p_school_id    VARCHAR(25)
,IN  p_grade        VARCHAR(2)
,IN  p_login        VARCHAR(25)
,IN  p_password     VARCHAR(25)
,OUT p_error        VARCHAR(1) 
)
BEGIN

    insert into rjh_log values ('',p_user_id,sysdate());

    IF p_step = 'add' THEN

        INSERT INTO USERS
                    ( USER_ID
                    , LOGIN
                    , FIRST_NAME
                    , MI
                    , LAST_NAME
                    , USER_TYPE_ID
                    , GRADE
                    , SCHOOL_ID
                    , PASSWORD
                    , ACTIVE_FLAG
                    ) 
             VALUES ( NULL
                    , p_login
                    , p_first_name
                    , p_mi
                    , p_last_name
                    , p_user_type
                    , p_grade
                    , p_school_id
                    , p_password
                    , 'Y'
                    ) ;

    ELSE

        UPDATE USERS
           SET LOGIN = p_login
             , FIRST_NAME = p_first_name
             , MI = p_mi
             , LAST_NAME = p_last_name
             , USER_TYPE_ID = p_user_type
             , GRADE = p_grade
             , SCHOOL_ID = p_school_id
             , PASSWORD = p_school_id
         WHERE USER_ID = p_user_id;

    END IF;

END
4

1 に答える 1

0
$userMaintUserId = ($_GET['userMaintUserId'] == "" ? "NULL" : $_GET['userMaintUserId']);
$userMaintStep = ($_GET['userMaintStep'] == "" ? "NULL" : $_GET['userMaintStep']);
$userMaintFirstName = ($_GET['userMaintFirstName'] == "" ? "NULL" : $_GET['userMaintFirstName']);
$userMaintMI = ($_GET['userMaintMI'] == "" ? "NULL" : $_GET['userMaintMI']);
$userMaintLastName = ($_GET['userMaintLastName'] == "" ? "NULL" : $_GET['userMaintLastName']);
$userMaintUserType = ($_GET['userMaintUserType'] == "" ? "NULL" : $_GET['userMaintUserType']);
$userMaintSchoolId = ($_GET['userMaintSchoolId'] == "" ? "NULL" : $_GET['userMaintSchoolId']);
$userMaintGrade = ($_GET['userMaintGrade'] == "" ? "NULL" : $_GET['userMaintGrade']);
$userMaintLogin = ($_GET['userMaintLogin'] == "" ? "NULL" : $_GET['userMaintLogin']);
$userMaintLogin = ($_GET['userMaintPassword1'] == "" ? "NULL" : $_GET['userMaintPassword1']);
于 2012-06-04T02:19:55.793 に答える