【问题标题】:PHP SQL Server Insert issuePHP SQL Server插入问题
【发布时间】:2009-07-16 14:21:39
【问题描述】:

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

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";

【问题讨论】:

    标签: php sql-server


    【解决方案1】:

    你可能想把它放在一个过程中。由于您的 SQL 语句中有多个命令,我相信大多数数据库驱动程序只能调用单个语句(或单个 T-SQL 语句)。因此,如果您需要发生多件事,请将其转换为存储过程或根据返回值等执行每个单独的语句。

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

    我猜它确实允许多个查询,但您需要找到正确的一个。还有一些 db 库具有 *_query_multiple 函数,但仅在 mysqli 库或 maxdb 库中。

    【讨论】:

    • 好的,我把它放在一个存储过程中。现在我收到以下错误:将数据类型 varchar 转换为数字时出错。 SP 在 Management Studio 中运行良好。我在表结构中看到的唯一一件事是其中一列是 bigint。这会导致问题吗?
    【解决方案2】:

    好的,我已经成功了。我转而使用 Microsoft 提供的 SQL 服务器驱动程序,这里提供 http://www.microsoft.com/downloads/details.aspx?FamilyId=61BF87E0-D031-466B-B09A-6597C21A2E2A&displaylang=en

    显然 mssql 驱动程序无法处理某些数据类型,例如 bigint。

    【讨论】:

      【解决方案3】:

      我的猜测是您在关闭自动提交的情况下运行,而不是提交事务。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          单独尝试插入语句。如果这可行,那么您知道有多个语句会导致错误(并且您需要用存储过程替换您的查询)。如果失败则jsight是对的,是autocommit的问题。

          就我个人而言,我会押注多个陈述,但这应该可以为您提供确定根本原因的途径(可能两者都是问题)。

          【讨论】:

          • 如果我自己运行插入语句。我收到“将数据类型 varchar 转换为数字时出错”。如果我将插入语句减少到唯一的必填字段,我仍然会收到错误消息。 bigint 数据类型会导致问题吗?
          猜你喜欢
          • 1970-01-01
          • 2020-05-07
          • 1970-01-01
          • 1970-01-01
          • 2011-01-20
          • 2013-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多