1

这是我在这里的第一篇文章,作为 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

我还搜索了许多其他博客,但似乎找不到任何有用的东西。

请帮忙!

4

0 回答 0