인라인 SQL 사용에서 저장 프로 시저 사용으로 데이터를 마이그레이션하는 중입니다. 내 코드를 실행할 때 걸림돌이되고 아래와 같은 오류가 발생합니다.
경고 : sqlsrv_execute ()는 매개 변수 1이 자원이 될 것으로 예상합니다. 285 행의 ajax_functions1.live.php에 제공된 bool입니다.
경고 : sqlsrv_fetch_array ()는 매개 변수 1이 자원이 될 것으로 예상합니다. 296 행의 ajax_functions1.live.php에 제공된 bool
다음은 코드의 일부입니다.
function db_add_user($email, $provider, $subuid,$data){
include 'config.php';
$email = $data['preferred_username'];
$params = array(
array(&$myparams['email'], SQLSRV_PARAM_IN),
array(&$myparams['provider'], SQLSRV_PARAM_IN)
);
$sql = "{EXEC [dbo].[getSubUniqueID_HPCreate] @email = ?, @provider = ?}";
$stmt = sqlsrv_prepare($conn, $sql, $params);
sqlsrv_execute($stmt);
$uid=null;
if($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) > 0) {
$uid = $row[0]['sub_unique_id'];
}else{
$params = array(
array(&$myparams['email'], SQLSRV_PARAM_IN),
array(&$myparams['provider'], SQLSRV_PARAM_IN),
array(&$myparams['subuid'], SQLSRV_PARAM_IN)
);
$sql = "{EXEC [dbo].[insertSubUniqueID_HPCreate] @email = ?, @provider = ?, @subuid = ?}";
$stmt = sqlsrv_prepare($conn, $sql, $params);
sqlsrv_execute($stmt);
}
return $uid;
}
여기에 SP가 있습니다. dbo.getSubUniqueID_HPCreate
USE [homepages_config]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[getSubUniqueID_HPCreate]
@email nvarchar(256),
@provider nvarchar(64)
AS
BEGIN
SET NOCOUNT ON;
SELECT sub_unique_id FROM homepages_config.dbo.users_providers
WHERE email = @email AND provider_id = @provider;
END
여기에 SP가 있습니다. dbo.insertSubUniqueID_HPCreate
USE [homepages_config]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[insertSubUniqueID_HPCreate]
@email nvarchar(256),
@provider nvarchar(256),
@subuid nvarchar(1024)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO homepages_config.dbo.users_providers ([email], [provider_id], [sub_unique_id])
VALUES (LOWER(@email), @provider, @subuid)
END
어떤 도움이라도 대단히 감사하겠습니다.
첫째, 저장 프로 시저가 정확합니다. 한 가지 문제는 @provider
매개 변수 ( @provider nvarchar(64)
및 @provider nvarchar(256)
)에 대한 다른 선언 이지만 입력 오류 일 수 있습니다.
따라서 스크립트를 약간 변경해야한다고 생각합니다.
{call sp_name (?, ...)}
구문을 사용 하여 저장 프로 시저를 실행 합니다. 이것은 경고 의 가능한 이유입니다 : sqlsrv_execute ()는 매개 변수 1이 리소스 일 것으로 예상하고, 라인에서 ajax_functions1.live.php에 주어진 bool ... 오류, 함수 sqlsrv_prepare()
가 올바르게 실행되지 않았고이 실행의 결과를 확인해야하기 때문입니다. . 참고, 당신이 사용할 수 있음 sqlsrv_query()
,이 기능은 모두 문 준비와 문 실행을 수행하고, 매개 변수화 된 쿼리를 실행하는 데 사용할 수 있기 때문이다.db_add_user()
함수에 대한 매개 변수 선언을 변경하십시오 .sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)
는 연관 배열이므로 $row[0]['sub_unique_id']
오류입니다.다음 스크립트 (코드 기반)는 문제에 대한 가능한 해결책입니다.
<?php
function db_add_user($email, $provider, $subuid){
include 'config.php';
$params = array(
array($email, SQLSRV_PARAM_IN),
array($provider, SQLSRV_PARAM_IN)
);
$uid = null;
$sql = "{call [dbo].[getSubUniqueID_HPCreate]( ?, ? )}"
$stmt = sqlsrv_query($conn, $sql, $params);
if ($stmt === false) {
echo print_r(sqlsrv_errors(), true);
return null;
}
if ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
$uid = $row['sub_unique_id'];
} else {
$params = array(
array($email, SQLSRV_PARAM_IN),
array($provider, SQLSRV_PARAM_IN),
array($subid SQLSRV_PARAM_IN)
);
$sql = "{call [dbo].[insertSubUniqueID_HPCreate]( ?, ?, ? )}"
$stmt = sqlsrv_query($conn, $sql, $params);
if ($stmt === false) {
echo print_r(sqlsrv_errors(), true);
return null;
}
}
return $uid;
}
?>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다