Re: ODBC or MS SQL DLL? WAS: Using PHP on Server 2003...
| From: | David Elliott | Date: | Tue, 06 Apr 2004 19:01:35 +0000 |
| Subject: | Re: ODBC or MS SQL DLL? WAS: Using PHP on Server 2003... | ||
| References: | 1 2 3 | Groups: | php.windows |
| Request: | Send a blank email to php-windows+get-23386@lists.php.net to get a copy of this message | ||
Dear B.A.T.
On 06 April 2004 at 14:40:29 +0200 (which was 13:40 where I live) Svensson,
B.A.T. (HKG) might have written
> Haven't tested your suggestion yet, but just look through it more
> carefully now. (Comments follow below).
> In general:
> The only special thing I can see that you are using in your code,
> that I am not using in my stored procedures are transactions
I always use transactions because I don't want information in the tables with
out the correct links in it.
> I think so at least. Except for that I am using all other stuff, and have
> no problem with it.
>>> So I am curious about this. Would you like to explain this a little bit more
>>> in details?
< ... >
>> set @PerId = @@identity
> This looks strange, id must be an identity column for this to work,
The SQL was slight incorrect sorry about that. Below is the full SQL I need
to insert.
=============8<=============================================================
begin transaction
set nocount on
declare
@PerId int
, @ConId int
, @DelID int
, @BilID int
insert into
WebItem (ItemTypeid,Name,LastUpdated,LegacyId)
Values(42,'',Current_timestamp,'090974248')
set @PerId = @@identity
insert into
WebItem (ItemTypeid,Name,LastUpdated,LegacyId)
Values(48,'xxxxx',Current_timestamp,'090974248')
set @ConId = @@identity
insert into
WebAddress
(ItemId,CompanyName,Bldg,Street,Area,District,Town,County,PCode,CountryId,Phone,AttLine)
Values
(@ConId,'xxxxx','xxxxx','xxxxx',''
,'','','','xxxxx','258'
,'','')
insert into
WebItem (ItemTypeid,Name,LastUpdated,LegacyId)
Values(50,'xxxxx',Current_timestamp,'090974248')
set @DelID = @@identity
insert into
WebAddress
(ItemId,CompanyName,Bldg,Street,Area,District,Town,County,PCode,CountryId,Phone,AttLine)
Values
(@DelId,'xxxxx','xxxxx','xxxxx',''
,'','','','xxxxx','258'
,'','')
insert into
WebItem (ItemTypeid,Name,LastUpdated,LegacyId)
Values(49,'xxxxx',Current_timestamp,'090974248')
set @BilID = @@identity
insert into
WebAddress
(ItemId,CompanyName,Bldg,Street,Area,District,Town,County,PCode,CountryId,Phone,AttLine)
Values
(@BilId,'xxxxx','xxxxx','xxxxx',''
,'','','','xxxxx','258'
,'xxxxxx','')
insert into
WebPerson
(ItemId,CompanyName,FirstName,LastName,Dear,TitleID,EmailAddress,Phone1,Phone2,Fax,PWord
,PwordPhrase,VatNO,ContID,BillID,DeliID,DistId,ContTyp,CustTyp,MailList,UpdateMe)
Values
(@PerId,'xxxxx','David','Elliott'
,'','141','b@b.c','xxxxxx',''
,'','password','','drff'
,@ConId,@BilId,@DelId,'50482','email','Other','','')
insert into WebItemlink
(itemlinktypeid,itemid,ite_itemid,lastupdated)
values
(52,50385,@PerId,current_timestamp)
insert into WebItemlink
(itemlinktypeid,itemid,ite_itemid,lastupdated)
values
(52,50386,@PerId,current_timestamp)
insert into WebItemlink
(itemlinktypeid,itemid,ite_itemid,lastupdated)
values
(52,50393,@PerId,current_timestamp)
insert into WebItemlink
(itemlinktypeid,itemid,ite_itemid,lastupdated)
values
(52,50395,@PerId,current_timestamp)
insert into WebItemlink
(itemlinktypeid,itemid,ite_itemid,lastupdated)
values
(52,50399,@PerId,current_timestamp)
insert into WebItemlink
(itemlinktypeid,itemid,ite_itemid,lastupdated)
values
(52,50403,@PerId,current_timestamp)
insert into WebItemlink
(itemlinktypeid,itemid,ite_itemid,lastupdated)
values
(52,50406,@PerId,current_timestamp)
insert into WebItemlink
(itemlinktypeid,itemid,ite_itemid,lastupdated)
values
(52,50409,@PerId,current_timestamp)
insert into WebItemlink
(itemlinktypeid,itemid,ite_itemid,lastupdated)
values
(52,50410,@PerId,current_timestamp)
set nocount off
commit
select
@PerId PersId
,@ConId ContId
,@BilId BillId
,@DelId DeliId
=============8<=============================================================
> and since you have not turned on identity insert I assume id is not an
> identity column.
< ... >
>> set nocount off
> Why do you turn on row counts just before you return the result?
> This might create problems in the receiving end.
This way you get a record count of 1 for that select statement you are just
about to execute.
>> commit
>>
>> select
>> @PerId PersId
>> ,@ConId ContId
>> ,@BilId BillId
>> ,@DelId DeliId
>>
>> =============8<=============================================================
>>
>> 2) You sometimes (i.e. not always therefore not reproducible) get a CGI error
>>
>> if you use header("Location:~t¨½ç
>> ”|.:nhttp://xxx.xxx.xxx.xx") to redirect address
>> after a database query, you will sometimes get CGI Error message.
>>
>> Here is the CGI Error message source code:
>>
>> =============8<=============================================================
>>
>> <head><title>Error in CGI Application</title></head>
>> <body><h1>CGI Error</h1>The specified CGI application misbehaved by not
>> returning a complete set of HTTP headers. The headers it did return
>> are:<p><p><pre></pre>
> I recognize this error, but I get it in another context, namely when
> stderr is not redirect to stdout when I execute a shell command with
> popen(). It might be that the SQL server sends an error message form time
> to time(?) (would it help to do a "set ansi_warnings off"?)
Good pointer. I will try that.
> The other reason why you might get this error is - but I am not 100%
> sure about this, since I got it some times when I worked with db calls,
> and just fixed the fault but forgot to document the fault it self -
> because some of the return values are nulls. You can fix this by
> typically doing like this:
> SELECT
> isnull(@PerdId, -1) PersId,
> isnull(...),
> etc, etc..
> Might be worth to test?
I might have a go at that as well
--
Bye, _______________________________________________
David | David Elliott | Software Engineer |
_________________________| list@elliott.uk.com | PGP Key ID 0x650F4534 |
| Demon Spawn Graphix (C) 1995 by McFly |