使用Microsoft PHP Driver 3.2对MSSQL数据库执行查询

时间:2015-08-01 13:00:22

标签: php sql-server pdo

我正在开发一个项目来连接到MSSQL数据库并对它执行查询,这绝对是新的。

所以我到目前为止所做的是设置WAMP,在php.ini中为PHP 5.5添加Microsoft PHP驱动程序,并使用以下代码创建了与我的数据库的成功连接:

    <?php
    $server = 'servername,1433';
    $database = 'database_name';
    $user = 'username';
    $password = 'pass';

    $conn = new PDO("sqlsrv:Server=$server;Database=$database", 
              "$user", "$password", 
              array(PDO::ATTR_EMULATE_PREPARES => false,
                    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
             );
    ?>

我正在使用SQL Server 2014.仅举这一点。所以现在我尝试用我的数据库中的表格显示一些信息:

<?php
require_once('sqlcon.php');

function GetRow($stmt)
{
return sqlsrv_fetch_array($stmt);
}


$sql = "SELECT * FROM dbo.operations";
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}

while( $row = GetRow($stmt) ) {
      echo ("<tr>");
            echo ("<td>" . $row['id'] . "</tr>");
            echo ("<td>" . $row['OperType'] . "</td>");
            echo ("<td>" . $row['Acct'] . "</td>");
            echo ("<td>" . $row['GoodID'] . "</td>");
            echo ("<td>" . $row['PartnerID'] . "</td>");
            echo ("<td>" . $row['ObjectID'] . "</td>");
            echo ("<td>" . $row['OperatorID'] . "</td>");
            echo ("<td>" . $row['Qtty'] . "</td>");
            echo ("<td>" . $row['Sign'] . "</td>");
            echo ("<td>" . $row['PriceIn'] . "</td>");
            echo ("<td>" . $row['PriceOut'] . "</td>");
            echo ("<td>" . $row['VatIn'] . "</td>");
            echo ("<td>" . $row['VatOut'] . "</td>");
            echo ("<td>" . $row['Discount'] . "</td>");
            echo ("<td>" . $row['Currency'] . "</td>");
            echo ("</tr>");
}

sqlsrv_free_stmt( $stmt);
?>

但我在浏览器中收到此错误:

  

致命错误:调用未定义的函数sqlsrv_query()   第11行的C:\ wamp \ www \ sql.php调用堆栈

     

时间记忆功能位置1 0.0005 139320 {main}().. \ sql.php:0

我曾多次尝试过不同的功能,但没有运气。我不知道为什么无法识别sqlsrv_query()函数。

我知道我错过了什么,但不知道是什么。提前谢谢。

1 个答案:

答案 0 :(得分:0)

使用完整的SQL Server PDO API考虑以下调整。

您的代码在连接期间声明了PDO,但您不使用该对象$conn->query(),而是使用$conn作为sqlsrv_query()函数中的参数。因此,您将两个API混为一谈:SQLSRV and PDO。要使用sqlsrv_query(),您需要使用sqlsrv_connect()进行连接。否则,请使用queryprepareexecute语句。

<?php

$server = 'servername,1433';
$database = 'database_name';
$username = 'username';
$password = 'pass';

try {
    $conn = new PDO("sqlsrv:Server=$server;Database=$database", 
                     $user, $password);
    $sql = "SELECT * FROM dbo.operations";    
    $STH = $conn->query($sql);

    $STH->setFetchMode(PDO::FETCH_ASSOC); 
}
catch(PDOException $e) {  
    echo $e->getMessage()."\n";
    exit;
}

while($row = $STH->fetch()) {
        echo ("<tr>");
        echo ("<td>" . $row['id'] . "</tr>");
        echo ("<td>" . $row['OperType'] . "</td>");
        echo ("<td>" . $row['Acct'] . "</td>");
        echo ("<td>" . $row['GoodID'] . "</td>");
        echo ("<td>" . $row['PartnerID'] . "</td>");
        echo ("<td>" . $row['ObjectID'] . "</td>");
        echo ("<td>" . $row['OperatorID'] . "</td>");
        echo ("<td>" . $row['Qtty'] . "</td>");
        echo ("<td>" . $row['Sign'] . "</td>");
        echo ("<td>" . $row['PriceIn'] . "</td>");
        echo ("<td>" . $row['PriceOut'] . "</td>");
        echo ("<td>" . $row['VatIn'] . "</td>");
        echo ("<td>" . $row['VatOut'] . "</td>");
        echo ("<td>" . $row['Discount'] . "</td>");
        echo ("<td>" . $row['Currency'] . "</td>");
        echo ("</tr>");
}

# close the connection
$conn = null;

?>