【问题标题】:MySQL Query for Profile View [duplicate]配置文件视图的 MySQL 查询 [重复]
【发布时间】:2014-01-21 20:43:00
【问题描述】:

我正在创建一个页面来查看一个人的个人资料(关于他的所有信息都存储在数据库中 - 除了一些我没有选择的信息)。

我有这个代码:

<?php
    if($_SESSION['id']) {
    echo '<h2>Hello, '.$_SESSION['usr'].'!<br>You are registered and logged in!</h2>'; 
                $result = mysql_query("SELECT id,usr,pass,email,dt,priv FROM tz_members WHERE usr = $)SESSION['usr']");
                echo "<table border='0'>
                <tr>
                <th style='width: 15px'>ID</th>
                <th style='width: 300px'>Username</th>
                <th style='width: 100px'>Privileges</th>
                <th style='width: 200px'>Join Date</th>
                </tr>";

                while($row = mysql_fetch_array($result))
                {
                echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['usr'] . "</td>";
                echo "<td>" . $row['priv'] . "</td>";
                echo "<td>" . $row['dt'] . "</td>";
                echo "</tr>";
                }
                echo "</table>"; }
    else echo '<div class="roundbox"><h2>Please, <a href="login.html">login</a> and come back later!</h2></div>';
    ?>

好像报错了:

警告:mysql_fetch_array() 期望参数 1 是资源,布尔值在 /home/u594115708/public_html/viewprofile.html 第 66 行给出

更准确地说,它所说的“第 66 行”是这一行:

while($row = mysql_fetch_array($result))

你能告诉我我做错了什么吗?

【问题讨论】:

  • $)SESSION = $_SESSION ?
  • 首先,您使用的是非常旧的mysql_query,而不是properly escaping things。其次,您在$)SESSION 附近的查询中有一个虚假的)。您的查询失败,您得到的是错误而不是结果行,而您忽略了它。
  • @Tadman,请问,我应该用什么来代替 mysql_query ?
  • 其实应该是 {$_SESSION['usr']} 而不是 $)SESSION['usr']
  • PHP The Right Way 指南中的建议是使用 learn PDO 并使用它,如果不是 Propel。 PDO 使正确转义数据变得更加容易,并且在 PHP 的未来版本中得到支持。 Propel 将使您更容易专注于编写业务逻辑,而不是陷入 SQL 的困境。

标签: php mysql forms profile


【解决方案1】:
$result = mysql_query("SELECT id,usr,pass,email,dt,priv FROM tz_members WHERE usr = $)SESSION['usr']");
  1. 我猜应该是$_SESSION

  2. 您不能将数组变量放入这样的字符串中

为避免此类语法错误,请正确使用多于 1 行并连接变量,并将字符串放在引号中(usr = string string string 不起作用,您需要usr = 'string string string'):

$result = mysql_query("
    SELECT
      id,usr,pass,email,dt,priv
    FROM
      tz_members
    WHERE
      usr = '" . $_SESSION['usr'] . "'
");

【讨论】:

  • 啊,明白了,到了'" 然后加$_SESSION,谢谢,问题已经解决了。请问,我应该用什么代替mysql_query?
  • 幸运的是,so 上的代码格式足以让单引号和双引号彼此相邻,你明白了:)
  • 你应该使用 PDO 或者至少使用 mysqli_query(而不是 mysql_query)
猜你喜欢
  • 2012-11-17
  • 1970-01-01
  • 2018-05-04
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多