2009-07-16 108 views
0

以下语句在MS SQL Server管理工作室中运行良好。但是,当我尝试通过PHP执行插入不会发生,并且不返回错误。我知道我的连接是有效的,所有我的选择语句正确返回。我错过了什么?PHP SQL Server插入问题

DECLARE @id bigint; SET @id = (SELECT MAX(application_track_id) + 1 FROM application_track_data); INSERT INTO application_track_data (application_track_id,user_id, action_key, action, ip_address, session_id, application) VALUES (@id,1,'584','login','192.168.37.60','05sn3618p61dvmml6pkefuteg2','akamata'); 

这是我用来执行sql的代码。

$result = mssql_query($sql); 
if(!$result) 
{ 
print "Error:" . mssql_get_last_message(); 
} 
else 
print "Success"; 

回答

1

你可能想把它放在一个过程中。既然你在你的SQL语句中有多个命令,我相信大多数db驱动程序只能调用单个语句(或单个T-SQL语句)。所以,如果你需要多事情发生把它变成一个存储过程或执行每个单独的语句基于返回值等

UPDATE:试试这个:http://us3.php.net/manual/en/function.mssql-next-result.php

我猜它允许多个查询,但是你需要得到正确的一个。还有一些db库有一个* _query_multiple函数,但只在mysqli库或maxdb库中。

+0

好吧,我把它放在一个存储过程。现在我收到以下错误:将数据类型varchar转换为数字时出错。 SP从Management Studio运行良好。我在表结构中看到的唯一情况是其中一列是bigint。会造成问题吗? – James 2009-07-16 15:18:47

0

我的猜测是,你正在运行自动提交关闭,而不是提交交易。

0

这种活动确实应该在存储过程中。更容易管理和更容易从PHP调用。您还需要每次都提交这些更改。

0

单独尝试插入语句。如果这有效,那么你知道有多个语句导致错误(并且你需要用存储过程替换你的查询)。如果失败,那么jsight是正确的,这是自动提交的问题。

就我个人而言,我会用多条语句来下注赌注,但是这应该给你一条确定根本原因的路线(这可能是一个问题)。

+0

如果我自己运行插入语句。 “我将数据类型varchar转换为数字时出错”。如果我减少插入语句到唯一的必填字段,我仍然得到错误。 bigint数据类型会导致问题吗? – James 2009-07-16 14:32:14