【问题标题】:working with null and bit fields with php and sql server使用 php 和 sql server 处理 null 和 bit 字段
【发布时间】:2013-06-20 05:03:44
【问题描述】:

我将使用 this 的值:

$HEA_LivingWill  = $_POST['HEA_LivingWill'] == 'on'  ? true : false;

更新 sql server 表中的 bit 字段。

请注意上面的代码是php。

我想$_POST['HEA_LivingWill'] 的值可以是'on'null,或者任何与“on”相反的值

从 php 中的常规变量处理 bit sql server 字段的正确方法是什么?

请注意,当我执行update mytable set my field =$HEA_LivingWill 之类的 sql 语句时,查询甚至不会通过。它没有给我一条错误消息,而且我知道查询没有执行,因为我使用 sql server profiler/

请注意,我也尝试让$HEA_LivingWill = $_POST['HEA_LivingWill'] == 'on' ? 1:0; 收到相同的结果。

如果你感兴趣,下面是从 php 运行的插入语句:

 $create_info = mssql_query("INSERT INTO 
 Health 
 (RES_ID, HEA_LastUser, HEA_DateStamp, HEA_Vision, HEA_Hearing, HEA_Mobility, HEA_Falls, HEA_Food, HEA_FoodPref, HEA_FoodDetails, HEA_Insect, HEA_InsectDetails, HEA_Driver, HEA_Make, HEA_Model, HEA_Year, HEA_Color, HEA_Plate, HEA_ParkArea, HEA_Care, HEA_Height, HEA_Weight, HEA_History1, HEA_History2, HEA_History3, HEA_History4, HEA_History5, HEA_History6, HEA_History7, HEA_History8, HEA_History9, HEA_History10, HEA_History11, HEA_History12, HEA_History13, HEA_History14, HEA_History15, HEA_History16, HEA_OtherIll, HEA_HistoryDetails, HEA_HospName, HEA_HospPhone, HEA_PhyName1, HEA_PhyAddress1, HEA_PhyPhone1, HEA_PhyFax1, HEA_PhyEmail1, HEA_PhySpecialty1, HEA_PhyName2, HEA_PhyAddress2, HEA_PhyPhone2, HEA_PhyFax2, HEA_PhyEmail2, HEA_PhySpecialty2, HEA_OtherAll, HEA_OtherDetails, HEA_Pendant, HEA_Storage

 ,HEA_LivingWill            
  ,HEA_Medical_Power_Attorney
  ,HEA_POLST                 
  ,HEA_MOST                  
  ,HEA_DNR     )              

 VALUES 
 ('$RES_ID', '$USR_ID', '$HEA_DateStamp','$HEA_Vision', '$HEA_Hearing', '$HEA_Mobility', '$HEA_Falls', '$HEA_Food', '$HEA_FoodPref', '$HEA_FoodDetails', '$HEA_Insect', '$HEA_InsectDetails', '$HEA_Driver', '$HEA_Make', '$HEA_Model', '$HEA_Year', '$HEA_Color', '$HEA_Plate', '$HEA_ParkArea', '$HEA_Care', '$HEA_Height', '$HEA_Weight', '$HEA_History1', '$HEA_History2', '$HEA_History3', '$HEA_History4', '$HEA_History5', '$HEA_History6', '$HEA_History7', '$HEA_History8', '$HEA_History9', '$HEA_History10', '$HEA_History11', '$HEA_History12', '$HEA_History13', '$HEA_History14', '$HEA_History15', '$HEA_History16', '$HEA_OtherIll', '$HEA_HistoryDetails', '$HEA_HospName', '$HEA_HospPhone', '$HEA_PhyName1', '$HEA_PhyAddress1', '$HEA_PhyPhone1', '$HEA_PhyFax1', '$HEA_PhyEmail1', '$HEA_PhySpecialty1', '$HEA_PhyName2', '$HEA_PhyAddress2', '$HEA_PhyPhone2', '$HEA_PhyFax2', '$HEA_PhyEmail2', '$HEA_PhySpecialty2', '$HEA_OtherAll', '$HEA_OtherDetails', '$HEA_Pendant', '$HEA_Storage' 

 ,'$HEA_LivingWill'          //please also note i have tried without the single quotes for these 5 variables
 ,'$HEA_Medical_Power_Attorney'
 ,'$HEA_POLST'                 
 ,'$HEA_MOST'                  
 ,'$HEA_DNR'                
 )") or die ("Error - No record creation"); 

我确定我遗漏了一些细节,请让我知道我还能提供什么。

这是HEALTH 表的结构:

USE [KCustom]
GO

/****** Object:  Table [dbo].[Health]    Script Date: 6/19/2013 10:17:16 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Health](
    [HEA_ID] [int] IDENTITY(1,1) NOT NULL,
    [RES_ID] [int] NULL,
    [HEA_LastUser] [int] NULL,
    [HEA_DateStamp] [datetime] NULL,
    [HEA_Vision] [int] NULL,
    [HEA_Hearing] [int] NULL,
    [HEA_Mobility] [int] NULL,
    [HEA_Falls] [int] NULL,
    [HEA_Food] [varchar](5) NULL,
    [HEA_FoodPref] [int] NULL,
    [HEA_FoodDetails] [varchar](max) NULL,
    [HEA_Insect] [varchar](5) NULL,
    [HEA_InsectDetails] [varchar](max) NULL,
    [HEA_Driver] [varchar](5) NULL,
    [HEA_Make] [varchar](50) NULL,
    [HEA_Model] [varchar](50) NULL,
    [HEA_Year] [varchar](50) NULL,
    [HEA_Color] [varchar](50) NULL,
    [HEA_Plate] [varchar](50) NULL,
    [HEA_ParkArea] [varchar](50) NULL,
    [HEA_Care] [int] NULL,
    [HEA_Height] [varchar](50) NULL,
    [HEA_Weight] [varchar](50) NULL,
    [HEA_History1] [varchar](5) NULL,
    [HEA_History2] [varchar](5) NULL,
    [HEA_History3] [varchar](5) NULL,
    [HEA_History4] [varchar](5) NULL,
    [HEA_History5] [varchar](5) NULL,
    [HEA_History6] [varchar](5) NULL,
    [HEA_History7] [varchar](5) NULL,
    [HEA_History8] [varchar](5) NULL,
    [HEA_History9] [varchar](5) NULL,
    [HEA_History10] [varchar](5) NULL,
    [HEA_History11] [varchar](5) NULL,
    [HEA_History12] [varchar](5) NULL,
    [HEA_History13] [varchar](5) NULL,
    [HEA_History14] [varchar](5) NULL,
    [HEA_History15] [varchar](5) NULL,
    [HEA_History16] [varchar](5) NULL,
    [HEA_OtherIll] [varchar](500) NULL,
    [HEA_HistoryDetails] [varchar](max) NULL,
    [HEA_HospName] [varchar](500) NULL,
    [HEA_HospPhone] [varchar](500) NULL,
    [HEA_HospAddress] [varchar](max) NULL,
    [HEA_PhyName1] [varchar](max) NULL,
    [HEA_PhyAddress1] [varchar](max) NULL,
    [HEA_PhyPhone1] [varchar](max) NULL,
    [HEA_PhyFax1] [varchar](max) NULL,
    [HEA_PhyEmail1] [varchar](max) NULL,
    [HEA_PhySpecialty1] [varchar](max) NULL,
    [HEA_PhyName2] [varchar](max) NULL,
    [HEA_PhyAddress2] [varchar](max) NULL,
    [HEA_PhyPhone2] [varchar](max) NULL,
    [HEA_PhyFax2] [varchar](max) NULL,
    [HEA_PhyEmail2] [varchar](max) NULL,
    [HEA_PhySpecialty2] [varchar](max) NULL,
    [HEA_OtherAll] [varchar](5) NULL,
    [HEA_OtherDetails] [varchar](max) NULL,
    [HEA_RespParty] [varchar](max) NULL,
    [HEA_MovedFrom] [int] NULL,
    [HEA_PersonRespName] [varchar](max) NULL,
    [HEA_PersonRespAddress] [varchar](max) NULL,
    [HEA_PersonRespPhone] [varchar](max) NULL,
    [HEA_PersonRespEmail] [varchar](max) NULL,
    [HEA_PersonRespGuardian] [int] NULL,
    [HEA_PersonRespPOA] [int] NULL,
    [HEA_PersonRespPayee] [int] NULL,
    [HEA_DentistName] [varchar](max) NULL,
    [HEA_DentistAddr] [varchar](max) NULL,
    [HEA_DentistPhone] [varchar](max) NULL,
    [HEA_DentistEmail] [varchar](max) NULL,
    [HEA_CaseName] [varchar](max) NULL,
    [HEA_CaseAddr] [varchar](max) NULL,
    [HEA_CasePhone] [varchar](max) NULL,
    [HEA_CaseEmail] [varchar](max) NULL,
    [HEA_Pendant] [varchar](50) NULL,
    [HEA_Storage] [varchar](50) NULL,
    [HEA_LivingWill] [bit] NULL,
    [HEA_Medical_Power_Attorney] [bit] NULL,
    [HEA_POLST] [bit] NULL,
    [HEA_MOST] [bit] NULL,
    [HEA_DNR] [bit] NULL,
 CONSTRAINT [PK_Health] PRIMARY KEY CLUSTERED 
(
    [HEA_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

请注意$_POST[] variables 是从上一页抓取的。这里是entire first page 这些变量的来源。

如果您想查看执行INSERT, here it is.的页面的完整源代码

我确实放了:

or var_dump($create_info);  

而不是or die(...);

虽然没有出错,但也没有执行任何操作

我也试过放置

,1,1,1,1,1            
 )") or die ("Error - No record creation"); 

代替:

 ,$HEA_LivingWill          
 ,$HEA_Medical_Power_Attorney
 ,$HEA_POLST 
 ,$HEA_MOST                  
 ,$HEA_DNR  )") or die ("Error - No record creation"); 

结果没有变化。记录不受影响

【问题讨论】:

  • $HEA_LivingWill = $_POST['HEA_LivingWill'] = 'on' ? true : false; 你不应该使用== 'on'吗?
  • 这是一个很好的观点,但是仍然得到相同的结果
  • 您的“更新语句”实际上是一个插入语句。再说一遍,您是要更新还是插入?
  • 道歉我的意思是插入
  • 请为Health 发布您的数据库结构。我还计算了 63 个列名,它们匹配。

标签: php html sql sql-server parameters


【解决方案1】:

请尝试插入:

$create_info = mssql_query("INSERT INTO 
Health 
(RES_ID, HEA_LastUser, HEA_DateStamp, HEA_Vision, HEA_Hearing, HEA_Mobility, HEA_Falls, HEA_Food, HEA_FoodPref, HEA_FoodDetails, HEA_Insect, HEA_InsectDetails, HEA_Driver, HEA_Make, HEA_Model, HEA_Year, HEA_Color, HEA_Plate, HEA_ParkArea, HEA_Care, HEA_Height, HEA_Weight, HEA_History1, HEA_History2, HEA_History3, HEA_History4, HEA_History5, HEA_History6, HEA_History7, HEA_History8, HEA_History9, HEA_History10, HEA_History11, HEA_History12, HEA_History13, HEA_History14, HEA_History15, HEA_History16, HEA_OtherIll, HEA_HistoryDetails, HEA_HospName, HEA_HospPhone, HEA_PhyName1, HEA_PhyAddress1, HEA_PhyPhone1, HEA_PhyFax1, HEA_PhyEmail1, HEA_PhySpecialty1, HEA_PhyName2, HEA_PhyAddress2, HEA_PhyPhone2, HEA_PhyFax2, HEA_PhyEmail2, HEA_PhySpecialty2, HEA_OtherAll, HEA_OtherDetails, HEA_Pendant, HEA_Storage

,HEA_LivingWill            
,HEA_Medical_Power_Attorney
,HEA_POLST                 
,HEA_MOST                  
,HEA_DNR     )              

VALUES 
($RES_ID, $USR_ID, '$HEA_DateStamp',$HEA_Vision, $HEA_Hearing, $HEA_Mobility, $HEA_Falls, '$HEA_Food', $HEA_FoodPref, '$HEA_FoodDetails', '$HEA_Insect', '$HEA_InsectDetails', '$HEA_Driver', '$HEA_Make', '$HEA_Model', '$HEA_Year', '$HEA_Color', '$HEA_Plate', '$HEA_ParkArea', $HEA_Care, '$HEA_Height', '$HEA_Weight', '$HEA_History1', '$HEA_History2', '$HEA_History3', '$HEA_History4', '$HEA_History5', '$HEA_History6', '$HEA_History7', '$HEA_History8', '$HEA_History9', '$HEA_History10', '$HEA_History11', '$HEA_History12', '$HEA_History13', '$HEA_History14', '$HEA_History15', '$HEA_History16', '$HEA_OtherIll', '$HEA_HistoryDetails', '$HEA_HospName', '$HEA_HospPhone', '$HEA_PhyName1', '$HEA_PhyAddress1', '$HEA_PhyPhone1', '$HEA_PhyFax1', '$HEA_PhyEmail1', '$HEA_PhySpecialty1', '$HEA_PhyName2', '$HEA_PhyAddress2', '$HEA_PhyPhone2', '$HEA_PhyFax2', '$HEA_PhyEmail2', '$HEA_PhySpecialty2', '$HEA_OtherAll', '$HEA_OtherDetails', '$HEA_Pendant', '$HEA_Storage' 

,$HEA_LivingWill          
,$HEA_Medical_Power_Attorney
,$HEA_POLST                 
,$HEA_MOST                  
,$HEA_DNR                
)") or die ("Error - No record creation"); 

如果还是不行,请在查询后发var_dump($create_info)

【讨论】:

  • @Артём Царионов,你试过这个吗?
  • 非常感谢,你改了什么?我现在就试试
  • 对于这个声明我得到了错误 - 没有创建记录
  • 至少这应该证明您的原始查询虽然没有按预期执行...如果您运行原始查询并执行var_dump($create_info),其中有什么?
  • 我做了这样的查询............ ,$HEA_MOST ,$HEA_DNR )") 或 var_dump($create_info); (你可以在最后看到我放 var_dump 而不是“或死”,转储没有显示任何内容,应该这样吗?
【解决方案2】:
$HEA_LivingWill  = ($_POST['HEA_LivingWill'] =='on')  ? 1 : 0;

您需要将 False/True 值转换为 0/1。 SQL Server 不会为您执行此隐式转换。

【讨论】:

  • 删除插入语句中'$HEA_LivingWill'周围的单冒号
  • 根据帖子,他试过$HEA_LivingWill = $_POST['HEA_LivingWill'] = 'on' ? 1:0; 不一样。
  • pastebin.com/TvXKCaBX 此代码显示了首先填充的变量
  • 我还贴出了整个站点有插入查询的源代码
  • @DynamicDeveloper 那么你怎么看?还有其他建议吗?
猜你喜欢
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2010-12-19
  • 2011-04-04
  • 2011-06-11
  • 2011-12-25
相关资源
最近更新 更多