-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이되도록 처리하는 방법에 대한 통찰력을 얻을 수 있습니까? 미리 감사드립니다!MySQL 정수 IN 매개 변수가 0으로 변환 중
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
포스트 코드. 어딘가에 문자열이 int로 캐스트되고 있습니다. 숫자로 시작하지 않는 문자열은 0으로 캐스팅됩니다. –
@Michael @ 포함 된 코드로 질문을 편집했습니다. – Ryan
검색어 매개 변수를 이스케이프 처리하지 않습니다. SQL 문을 피하기 위해 준비된 문이나 적절한 이스케이프 사용을 고려하십시오. –