0

php で Bind_param を使用してログイン テーブルからユーザー名とパスワードを取得しています。私の質問は、ユーザーのすべての情報を取得し、それをオブジェクトとして変数に渡す方法です。以下の私のコードを見てください

  require 'dbc.php';
        require 'security.php';

        $myusername=trim($_POST['strusername']); 
        $mypassword=trim($_POST['strpassword']);
        $myusername =escape($myusername);
        $mypassword=escape($mypassword);

    $sql = "SELECT * FROM login WHERE strusername=? AND strpassword=?";

    $stmt  = $db->prepare($sql);
    $stmt->bind_param('ss',$myusername,$mypassword);
    $stmt->execute();

    $stmt->store_result();

    if($stmt->num_rows){
                echo "user verified, Access Granted.";

    //      while($row=$stmt->fetch_object()){
    //          $strfullname= $row->strfullname;
    //          $strcompany= $row->strcompany;
    //          $strdept= $row->strdept;
    //          $strloc= $row->strloc;
    //          $strposition= $row->strposition;
    //          $strauthorization= $row->strauthorization;
    //          $stremailadd= $row->stremailadd;
    //          $strcostcent= $row->strcostcent;
    //          $strtelephone= $row->strtelephone;
    //      };
//    how to fetch all data in my query using param LIKE THIS

            }else
            {
                echo "Invalid Username or Password";
            }
4

1 に答える 1

0

あなたが探しているのは、 fetch_row()使用されるextract() のようです。したがって、次のような結果になります。

while ($row = $stmt->fetch_row()) {
    extract($row, EXTR_OVERWRITE);
    // your logic here...
}

公正な警告として、これにより、データベースの列と同じ名前の変数が上書きされます。スーパーグローバルではなくデータベースからプルしているため、少なくとも何をしているのかはわかりますが、特にこのコードを関数/メソッド内ではなくグローバルスコープに持っている場合は、依然としてリスクがあります。

そのため、次のように、抽出する行をarray_intersect_key()でラップすることができます。

$allowedFields = array_flip(['strfullname', 'strcompany', 'strdept',
    'strloc', 'strposition', 'strauthorization', 'stremailadd',
    'strcostcent', 'strtelephone']);

while ($row = $stmt->fetch_row()) {
    extract(array_intersect_key($row, $allowedFields), EXTR_OVERWRITE);
    // your logic here...
}

そのため、どのフィールドが突然 (ローカルまたはグローバル) 変数に変わるかをコードで文書化します。

于 2015-03-23T02:41:49.927 に答える