【问题标题】:No result when executing multiple statements with PHP ODBC使用 PHP ODBC 执行多个语句时没有结果
【发布时间】:2020-07-27 16:09:06
【问题描述】:

我在 PHP 中使用 ODBC 一次执行多个查询时遇到问题。

我的代码:

$createRowQ = "
    declare @myid uniqueidentifier; 
    set @myid = NEWID(); 
    insert into tps_attachment_data values (@myid, ''); 
    print @myid;
";
$createRow = odbc_prepare($connection, $createRowQ);
odbc_execute($createRow);
$result = odbc_result_all($createRow);

结果:

变量$result 为空,PHP 向我发出 SQL 错误警告:

PHP 警告:odbc_execute():SQL 错误:[Microsoft][ODBC Driver 13 SQL Server][SQL Server]46023075-414D-4FF2-87D5-B3B462FE3AF8, SQL 在线 C:\inetpub\wwwroot\receiver.php 中的 SQLExecute 中的状态 01000 656

我认为问题在于一次调用多个语句,但我需要声明我的 ID 才能打印它。任何帮助将不胜感激。

当我在 Management Studio 中执行 SQL 语句时,它工作得很好。

PHP 版本为 7.3.1。

【问题讨论】:

    标签: php sql-server


    【解决方案1】:

    我能够重现此警告,因此以下答案为此问题提供了可能的解决方案。必要的更改是:

    • 在语句的第一行使用SET NOCOUNT ON,以防止 SQL Server 将受影响的行数作为结果集的一部分传递。
    • 使用SELECT @myid AS MyID 代替PRINT @myid 将生成的唯一标识符作为结果集返回。
    • 使用odbc_exec() 准备和执行SQL 语句。

    PHP:

    <?php
    
    ...
    $createRowQ = "
        SET NOCOUNT ON;
        DECLARE @myid uniqueidentifier;
        SET @myid = NEWID();
        INSERT INTO tps_attachment_data VALUES (@myid, ''); 
        SELECT @myid AS MyID;
        --PRINT @myid
    ";
    
    $result = odbc_exec($connection, $createRowQ);
    $line = odbc_fetch_array($result);
    echo $line["MyID"];
    ...
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      相关资源
      最近更新 更多