2015-03-23 5 views
0

Ребята, используя Bind_param в php для извлечения имени пользователя и пароля из таблицы входа в систему. мой вопрос: как я могу получить всю информацию пользователя и передать ее переменной как объекту? смотрите мой код нижеPHP Bind_param fetch data

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"; 
      } 
+0

http://php.net/manual/en/mysqli-stmt.bind-result.php – Ghost

+0

yah я использовал это. но im использует SELECT *, а не по полю. необходимо в bind_param для ввода всех полей в запросе SELECT. например SELECT strfullname, strcompany, strdep FROM Login WHERE ..... или намного проще, чем использовать SELECT * вместо этого? – Nixxx

+0

может быть динамичным, ответ на этот вопрос лежит на комментариях ниже руководства, некоторые из пользователей уже нашли способ обойти эту проблему. http://php.net/manual/en/mysqli-stmt.bind-result.php#102179 вам не нужно использовать весь бит, только внутри оператора if, которого хватит – Ghost

ответ

0

Похоже, что вы ищете является extract(), используется с fetch_row(). Таким образом, вы в конечном итоге с чем-то вроде:

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

поэтому код документы, какие поля внезапно превращаются в (локальные или глобальные) переменные.

 Смежные вопросы

  • Нет связанных вопросов^_^