【问题标题】:Executing a simple SQL Server stored procedure from php从 php 执行一个简单的 SQL Server 存储过程
【发布时间】:2013-01-28 09:46:18
【问题描述】:

首先:我对google和stackoverflow进行了研究,但对我没有帮助。

我是初学者,所以请不要仅仅通过阅读标题并投票反对我来直接责备我。 Stackoverflow 有时似乎非常激进:(

我正在尝试从 PHP 执行一个简单的存储过程。 连接到数据库工作正常。

此代码还可以通过 SQL Server Management Studio 中的查询运行:

Execute SP_TPL_DeleteUser
@ExternalFieldID = 22

关于本手册:PHP Stored Procedures and SQL ServerMSSQL Bind

我构建了这行代码:

$id=22;
$stmt=mssql_init("SP_TPL_DeleteUser", $conn);
mssql_bind($stmt, "@ExternalFieldID", $ExternalFieldID, SQLVARCHAR, false, false, 255);
mssql_execute($stmt);
mssql_free_statement($stmt);

我的输出是:

( ! ) 致命错误:调用未定义的函数 mssql_init() in C:\Users\kians_000\dev\traka\index.php 在第 32 行

当然我试过玩,但没有用:( 如有任何提示,我将不胜感激。

编辑:

我可以用这个连​​接到数据库:

$serverName = "KIAN-PC";
$connectionInfo = array( "Database"=>"T32Database");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn )
{
    echo "Connection established.\n";
}
else
{
    echo "Connection could not be established.\n";
    die( print_r( sqlsrv_errors(), true));
}

但是像这样的简单查询:

$version = mssql_query('SELECT *  FROM [T32Database].[dbo].[TUsers]');
$row = mssql_fetch_array($version);

echo $row[0];

产生这个输出:

致命错误:在第 42 行调用 C:\Users\kians_000\dev\traka\index.php 中未定义的函数 mssql_query()

phpinfo 告诉我这个:

sqlsrv

启用 sqlsrv 支持

指令本地值主值
sqlsrv.ClientBufferMaxKBSize 10240 10240 sqlsrv.LogSeverity 0 0
sqlsrv.LogSubsystems 0 0 sqlsrv.WarningsReturnAsErrors 开启 开启

编辑 3: 我尝试了所有驱动程序。这是唯一有效的。 也许我的来源有问题。

<?php

//-----------------------------------------------
// Connect to SQL Server DB
//-----------------------------------------------

$serverName = "KIAN-PC";
$connectionInfo = array( "Database"=>"T32Database");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn )
{
    echo "Connection established.\n";
}
else
{
    echo "Connection could not be established.\n";
    die( print_r( sqlsrv_errors(), true));
}

//-----------------------------------------------
// Perform operations with connection.
//-----------------------------------------------

$version = mssql_query('SELECT *  FROM [T32Database].[dbo].[TUsers]');
$row = mssql_fetch_array($version);

echo $row[0];

/* Close the connection. */
sqlsrv_close( $conn);

?>

我的输出是:

连接已建立。 ( ! ) 致命错误:调用未定义的函数 第 42 行 C:\Users\kians_000\dev\traka\index.php 中的 mssql_query()

【问题讨论】:

  • 这看起来像是一个 PHP 问题。也许 MSSQL 库没有正确链接?
  • 链接正确。我可以连接到数据库。
  • 未定义函数表示未找到mssql_init 的代码。我认为它不会连接到您的数据库。
  • 输出为:连接建立。 ( ! ) 致命错误:在第 42 行调用 C:\Users\kians_000\dev\traka\index.php 中未定义的函数 mssql_query()

标签: php sql-server


【解决方案1】:

尝试将您的过程作为查询调用,而不是绑定:

mssql_query('exec SP_TPL_DeleteUser @ExternalFieldID = ' . $ExternalFieldID, $con); 

【讨论】:

  • 我试过这样:$ExternalFieldID = 22; mssql_query('exec SP_TPL_DeleteUser @ExternalFieldID = ' . $ExternalFieldID, $conn); ( ! ) 致命错误:在第 37 行调用 C:\Users\kians_000\dev\traka\index.php 中未定义的函数 mssql_query()
  • 那又如何,只有mssql_connect 有效?如果您使用的是 freetds 驱动程序,我可以理解 mssql_init 丢失,但不是 mssql_query :-/
  • 我在我的 php.ini extension=php_sqlsrv_54_ts.dll 中添加了以下行,也许这是错误的驱动程序?
  • 我现在试用了所有驱动程序。这似乎是唯一有效的。
  • 在编辑 3 中,您现在可以找到整个源代码。也许有什么问题?
【解决方案2】:

我将两个不同的驱动程序混合在一起。

有 mssql 和 sqlsrv 驱动程序。 检查语句是否以 mssql_ 或 sqlsrv_ 开头 我使用的是 MSSQL Express 2012,但似乎没有使用 mssql 驱动程序。

这里现在可以工作了(作为一个 hello world):

<?php

//-----------------------------------------------
// Connect to MSSQL-DB
//-----------------------------------------------

$serverName = "KIAN-PC";
$connectionInfo = array( "Database"=>"T32Database");
$conn = sqlsrv_connect( $serverName, $connectionInfo);


if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}

//-----------------------------------------------
// Perform operations with connection.
//-----------------------------------------------

if( $client_info = sqlsrv_client_info( $conn)) {
    foreach( $client_info as $key => $value) {
        echo $key.": ".$value."<br />";
    }
} else {
    echo "Error in retrieving client info.<br />";
}

/* Close the connection. */
sqlsrv_close( $conn);

?>

感谢大家的帮助!

【讨论】:

    【解决方案3】:

    如果您使用的是 WAMP,请确保已启用 mssql 模块。如果是,它将在上下文菜单中的名称旁边有一个复选标记。

    【讨论】:

    • 库已正确链接并启用了 mssql 模块。我可以连接到数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2019-02-05
    • 1970-01-01
    相关资源
    最近更新 更多