在PHP中使用params调用SQL Server存储过程

时间:2013-08-20 08:03:39

标签: php sql-server

这是我在这里的第一篇文章,作为PHP的初学者,所以请轻描淡写!!

我正在使用PHP 5.3和SQL Server 2012 express

我的问题是从PHP执行SQL服务器存储过程,该过程具有参数,其中参数的值来自HTML表单的$ _POST变量。

我的PHP代码如下:

    <?php
    require_once("../includes/initialize.php");
    //
    global $database;


    $username = "someone";
    $params = array($username); 
    $conn = $database->connection;

    $admin_set = sqlsrv_query($conn, "{call find_admin_by_username_p}", $params); 
    if($admin = $database->fetch_array($admin_set)) {
        var_dump($admin);
    } else {
        return null;
    }
    //
    /* THIS WORKS
    global $database;

    $admin_set = $database->query("{call find_admin_by_username}");
    if($admin = $database->fetch_array($admin_set)) {
        var_dump($admin);
      } else {
        return null;
    }
    */
    ?>

存储过程的代码是:

    CREATE PROCEDURE [dbo].[find_admin_by_username_p]
@username nvarchar(55)
    AS
    BEGIN
SELECT * FROM dbo.users
WHERE username = @username
    END

对于注释“THIS WORKS”部分,过程find_admin_by_username起作用,因为它不包含任何参数。但是我希望将@username作为由$ _POST表单字段提供的变量。

我这样做的主要原因是为了防止SQL注入,我也会在连接到表单后转义值。

这是我到目前为止看到的很多信息的链接

http://blogs.msdn.com/b/brian_swan/archive/2011/02/16/do-stored-procedures-protect-against-sql-injection.aspx

我也搜索了很多其他博客,但似乎找不到任何可行的东西。

请帮忙!

0 个答案:

没有答案