Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP绑定参数获取数据_Php_Mysqli_Bindparam - Fatal编程技术网

PHP绑定参数获取数据

PHP绑定参数获取数据,php,mysqli,bindparam,Php,Mysqli,Bindparam,我在php中使用Bind_param从登录表中检索用户名和密码。我的问题是如何获取用户的所有信息,并将其作为对象传递给变量?请看下面我的代码 require 'dbc.php'; require 'security.php'; $myusername=trim($_POST['strusername']); $mypassword=trim($_POST['strpassword']); $myusername =escap

我在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";
            }

看起来你要找的是,和。所以你最终会得到这样的结果:

while ($row = $stmt->fetch_row()) {
    extract($row, EXTR_OVERWRITE);
    // your logic here...
}
作为警告,这将覆盖与数据库列同名的任何变量。因为您是从数据库而不是超全局中提取代码,所以您至少知道您将进入什么,但这仍然是一个风险,特别是如果您将此代码放在全局范围而不是函数/方法中

因此,您可能希望包装要提取的行,如下所示:

$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...
}

因此,您的代码记录了哪些字段会突然变成(本地或全局)变量。

是的,我用过。但我用的是SELECT*而不是按字段。是否需要在bind_param中输入SELECT查询中的所有字段。如选择strfullname、strcompany、strdep FROM Login WHERE。。。。。或者更简单的方法,比如使用SELECT*?它可以是动态的,答案取决于手册下面的注释,一些用户已经找到了解决这个问题的方法。您不需要使用整个位,只要在if block语句中,就足够了。我在comment部分找到了它!谢谢你的参考@不,它没有,也不需要这样的功能。在PDO中
->execute()
之后,您可以直接使用
->fetchAll()
获取所有行,或者使用
fetch()
获取单个行。