【问题标题】:PHP try to querying MSSQL server [duplicate]PHP尝试查询MSSQL服务器[重复]
【发布时间】:2018-04-10 06:17:05
【问题描述】:

我尝试查询 MSSQL Server。查询非常简单,但仍然只得到错误。 PHP的版本是7.0.28,代码在这里:

$serverName = "(local)";
/* Connect using Windows Authentication. */
try
{
    $conn = new PDO("sqlsrv:server=$serverName ; Database=mgm59ood", "sa", "********");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    if ($conn)
    {
        $tsql = "select name from goods";
        $getResults = sqlsrv_query($conn, $tsql);

        // Error handling

        if ($getResults == FALSE)
        {
            die(FormatErrors(sqlsrv_errors()));
        }
    }
}

catch(Exception $ex)
{
    die(print_r($ex->getMessage()));
}

在我的浏览器中抛出符合 $getResults 的异常。

致命错误:未捕获错误:调用未定义函数 sqlsrv_query() 在 C:\xampp\htdocs\testwithsql\index.php:26 堆栈跟踪:#0 {main} 在第 26 行的 C:\xampp\htdocs\testwithsql\index.php 中抛出

请帮帮我。

【问题讨论】:

  • 我认为你想要$conn->query() 而不是sqlsrv_query(),因为你开始使用pdo 扩展。
  • 你使用了错误的错误函数 - sqlsrv_errors() - 你需要 pdo 的 - php.net/manual/en/pdo.error-handling.php
  • 谢谢,$conn->query() 有效,现在我没有错误,将尝试显示数据。

标签: php sql-server tsql


【解决方案1】:

您是否为 MS SQL 安装了任何驱动程序?

如果你没有这样做:

带 PDO 和不带 PDO 的演示:

<?php

echo "Test with php_pdo_sqlsrv (PDO)\n";

$serverName = "(local)";
try
{
    $dbh = new PDO("sqlsrv:server=$serverName; Database=Test", "sa", "...");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $tsql = "select 1 value";
    $result = $dbh->prepare($tsql)->execute();

    echo $result;
}
catch(PDOException $e)
{  
    print_r($e->getMessage());
}


echo "\nTest with php_sqlsrv (not PDO)\n";

$serverName = "(local)";
$connectionInfo = array( "Database"=>"Test", "UID"=>"sa", "PWD"=>"...");
try
{
    $conn = sqlsrv_connect($serverName, $connectionInfo);

    $tsql = "select 2 value";
    $result = sqlsrv_query($conn, $tsql);
    $obj = sqlsrv_fetch_object($result);
    echo $obj->value;   
}
catch(Exception $ex)
{
    print_r($ex->getMessage());
}

?>

【讨论】:

  • 我从链接中添加了驱动程序,同样的错误。我在这篇文章之前添加了它们,如果我没有驱动程序错误会有所不同。
  • @spootles - 是的,你是对的,这不是驱动程序错误。我添加了两个示例 - 使用 PDO 和没有 PDO。
猜你喜欢
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多