以下语句在MS SQL服务器管理工作室中运行良好。但是,当我尝试通过PHP执行时,不会发生插入,也不会返回错误。我知道我的连接有效,我的所有select语句都正确返回。我错过了什么?
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";
答案 0 :(得分:1)
您可能希望将其放入一个过程中。由于SQL语句中有多个命令,我相信大多数数据库驱动程序只能调用单个语句(或单个T-SQL语句)。因此,如果您需要执行多项操作,请将其转换为存储过程,或者根据返回值等执行每个单独的语句。
更新:试试这个:http://us3.php.net/manual/en/function.mssql-next-result.php
我想它确实允许多个查询但你需要得到正确的查询。还有一些db库具有* _query_multiple函数,但仅在mysqli库或maxdb库中。
答案 1 :(得分:1)
好的,我有它的工作。我切换到使用Microsoft提供的SQL服务器驱动程序http://www.microsoft.com/downloads/details.aspx?FamilyId=61BF87E0-D031-466B-B09A-6597C21A2E2A&displaylang=en。
显然,mssql驱动程序无法使用某些数据类型,例如bigint。
答案 2 :(得分:0)
我的猜测是你正在运行autocommit off,而不是提交事务。
答案 3 :(得分:0)
这种活动确实应该在存储过程中。更容易管理,更容易从PHP调用。您还需要每次都提交这些更改。
答案 4 :(得分:0)
单独尝试插入语句。如果可行,那么您知道有多个语句导致错误(并且您需要使用存储过程替换查询)。如果失败则jsight是正确的,这是autocommit的问题。
就个人而言,我会用多个陈述下注,但是这应该给你一个确定根本原因的途径(可能两者都有问题)。