【发布时间】:2020-03-25 00:52:38
【问题描述】:
我正在努力将我们的数据从使用内联 SQL 迁移到使用存储过程。我在运行我的代码时遇到了一个问题,并得到如下所示的错误:
警告:sqlsrv_execute() 期望参数 1 是资源,bool 在第 285 行的 ajax_functions1.live.php 中给出
警告:sqlsrv_fetch_array() 期望参数 1 是资源,在第 296 行的 ajax_functions1.live.php 中给出布尔值
以下是代码的摘录:
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
任何帮助将不胜感激。
【问题讨论】:
-
您的
$stmt = sqlsrv_prepare($conn, $sql, $params);显然失败了。可能是因为您没有提供$conn。检查$conn是否存在,然后使用sqlsrv_errors()来查看到底发生了什么错误 -
问题:1)
$conn在哪里定义和初始化,2)$email、$provider、$subuid、$data和$myparams之间有什么联系?谢谢。 -
$conn 在我包含在函数顶部的 config.php 文件中定义。 $email、$provider、$subuid 和 $data 从代码的前面部分传入。 $myparams 我是从这里的代码中得到的:stackoverflow.com/questions/31575135/… - 如果有其他方法我应该这样做,我很乐意。我只是在跟踪已经存在的东西......盲目地。
标签: php sql-server stored-procedures sqlsrv