【问题标题】:How to parse query row into arrays?如何将查询行解析为数组?
【发布时间】:2013-05-03 08:44:01
【问题描述】:

我有一个 PHP 登录系统,我在其中使用以下查询来比较用户名和密码:

    $mQuery = $mysqli->query("SELECT * FROM users WHERE user = '" . 
    $mysqli->real_escape_string(md5($_POST['user'])) ."' AND  pass= '" . 
    $mysqli->real_escape_string(md5($_POST['pass'])) . "'");

除了“用户”和“通行证”之外,用户行中还有其他字段,例如“姓名”和“电子邮件”。如何将所有这些字段放入一个数组中?

【问题讨论】:

  • 您正在使用 MD5 对您的密码进行哈希处理?不谢谢。您不妨使用纯文本,因为没有盐,这是完全无用的。您还错误地使用了mysqli,其中任何用户数据都应使用bind_param 注入以避免SQL injection bugs。您还对用户名进行哈希处理是完全超现实的,因为我以前从未见过这样做。
  • 为什么MD5你的用户名?
  • 这只是暂时的。在找到行解析的解决方案后,我正在修复它们。
  • 解决方法是阅读mysqli文档。那里有很多很好的使用例子。

标签: php mysql sql


【解决方案1】:

在 PHP 5.3 及更高版本中,fetch_all 会将所有行作为数组返回。如果将 MYSQLI_ASSOC 指定为结果类型,则数组中的每个元素都将是一个关联的字段数组,按名称索引。

// having done the query above

$rows = $mQuery->fetch_all(MYSQLI_ASSOC);

foreach ($rows as $row)
{
  print "email: " . $row['email'] . "<br />";
  // etc
}

对于早期版本,您需要手动完成:

$rows = array();

while ($row = $mQuery->fetch_array(MYSQLI_ASSOC))
  $rows[] = $row;

foreach ($rows as $row)
{
  print "email: " . $row['email'] . "<br />";
  // etc
}

【讨论】:

    【解决方案2】:

    您可能想从手册开始...

    $row = mysqli_fetch_array($mQuery, MYSQLI_ASSOC);

    $row = $mQuery-&gt;fetch_array(MYSQLI_ASSOC);

    当您使用对象表示法时,请使用选项 2。

    http://php.net/manual/en/mysqli-result.fetch-array.php

    【讨论】:

      【解决方案3】:

      也许这会有所帮助:

      if($result = mysqli_query($conn, $mQuery))
      {
          while($row = mysqli_fetch_assoc($result))
          {
              print_r($row);
          }
          mysqli_free_result($result);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多