1

これは私の最初の投稿であり、PHP の初心者として、軽く踏んでください!!

PHP 5.3 と SQL Server 2012 Express を使用しています

私の問題は、パラメーターの値が HTML フォームの $_POST 変数に由来するパラメーターを持つ PHP から SQL サーバー ストアド プロシージャを実行することです。

私の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