Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php sql server中的存储过程中是否可以用变量代替列名?_Php_Sql Server - Fatal编程技术网

Php sql server中的存储过程中是否可以用变量代替列名?

Php sql server中的存储过程中是否可以用变量代替列名?,php,sql-server,Php,Sql Server,我有一些执行存储过程的php代码,但是在执行php时会抛出错误。我试图弄清楚如何使用变量@col作为我要更新的列,并将该列的值设置为@val USE [***_Database] GO /****** Object: StoredProcedure [dbo].[InsertfromPHP] Script Date: 11/11/2015 13:58:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Alter PR

我有一些执行存储过程的php代码,但是在执行php时会抛出错误。我试图弄清楚如何使用变量@col作为我要更新的列,并将该列的值设置为@val

USE [***_Database]
GO
/****** Object:  StoredProcedure [dbo].[InsertfromPHP]    Script Date: 11/11/2015 13:58:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

Alter PROCEDURE [dbo].[UpdatefromPHP] 
    -- Add the parameters for the stored procedure here
    @Col varchar(25),
    @Val varchar(25),
    @DelvNumber varchar(25)

AS      
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    -- Insert statements for procedure here
    Declare @sqlText nvarchar(max)
    set @sqlText = N'Update NWDeliverables 
    Set ' + @Col + '= ' + @Val + 'where DelvNumber= ' + @DelvNumber;
    EXEC sp_executesql @sqlText;
END



<?php
include_once 'DbConnect.php';

    global $connect;
    global $record3;
    global $emptyQ;
    global $rightOn;
    global $SqlArr;
    $rightOn="Thank you, your time has been inserted successfully";
    $SqlArr = $_POST['SqlArr'];

        for ($i=0;$i<sizeof($SqlArr);$i++) {

            $Empid = $SqlArr[$i][0];
            $WkEnd = $SqlArr[$i][1] ;
            $Day = $SqlArr[$i][2] ;
            $Title = $SqlArr[$i][3] ;
            $Description = $SqlArr[$i][4] ;
            $Value = $SqlArr[$i][5] ;
            $AbbrevJob = $SqlArr[$i][6] ;
            $tsql_callSP = "Execute InsertfromPHP ?,?,?,?,?,?,?";
            $stmt3 = odbc_prepare($connect, $tsql_callSP);
                if($stmt3 === false)
                {
                    throw new ErrorException(odbc_errormsg());  
                }
            $lego = odbc_execute($stmt3,array($Empid,$WkEnd,$Day,$Title,$Description,$Value,$AbbrevJob));   
                if($lego === false)
                {
                    throw new ErrorException(odbc_errormsg());
                }
        }
    odbc_close($connect);
    ?>
作为Sql Server的新手,这意味着什么?如何使其成为有效的标识符EDIT:我检查了一下,发现@sqlQuery周围缺少括号。将它们放入,有效标识符错误消失,但现在收到的错误是@Col是无效列,令人惊讶的是,错误使用@Val中的值来给出错误。 “无效列名”AliA“

尝试在动态SQL语句中使用QUOTENAME(@Col)(而不仅仅是@Col)

编辑 试试这个:

SET @sqlText = 'UPDATE NWDeliverables
SET ' + QUOTENAME(@Col) + ' = ''' + @Val + '''
FROM NWDeliverables
WHERE DelvNumber = ''' + @DelvNumber + ''''

如果存储过程单独运行,您是否测试过它?实际上我没有。我所做的测试是,如果我准备好的语句和我的php被执行到另一个项目中,我正在做类似的事情,而没有变量作为列名。它是有效的,但这不是执行。我来试试。我试了你想用的方法,但没有用。就好像存储过程从不激发一样。因此,我对如何实现这一目标感到困惑。我正在为另一个应用程序使用相同的方法,而不使用动态列名,并使用准备好的语句来执行存储过程,从而出色地完成了我为其开发的任务。但在这里,它甚至无法启动,我假设这是因为@col变量。
declare @Col nvarchar(25)
    declare @Val nvarchar(25)
    declare @delvNumber nvarchar(25)
    set @DelvNumber = '501310-09'
    set @Val = 'AliA'
    set @Col = 'Wireman1'
    Declare @sqlText nvarchar(max)
    set @sqlText = N'Update NWDeliverables 
    Set ' + QUOTENAME(@Col) + ' = ' + @Val + ' where DelvNumber = ' + @DelvNumber
    EXEC @sqlText;

Error recieved:
Msg 203, Level 16, State 2, Line 10
The name 'Update NWDeliverables 
    Set [Wireman1] = AliA where DelvNumber = 501310-09' is not a valid identifier.
SET @sqlText = 'UPDATE NWDeliverables
SET ' + QUOTENAME(@Col) + ' = ''' + @Val + '''
FROM NWDeliverables
WHERE DelvNumber = ''' + @DelvNumber + ''''