【问题标题】:PHP SELECT * FROM not working correctlyPHP SELECT * FROM 无法正常工作
【发布时间】:2013-11-30 04:53:10
【问题描述】:

以下代码有问题:

# Connection:
      require('config.php');
      $MyConnection = new PDO('mysql:host=x;dbname=x', $dbusername, $dbpassword);
      $MyConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      # Collecting:
      $username = htmlspecialchars($_POST['username']);
      $password = htmlspecialchars($_POST['password']);
      $lastname = htmlspecialchars($_POST['lastname']);
      $email = htmlspecialchars($_POST['email']);

      # Checking:
      $findUser = $MyConnection->prepare("SELECT * FROM Users WHERE 
        Username = :username OR Email = :email LIMIT 2");
      $findUser->bindParam(':username', $username);
      $findUser->bindParam(':email', $email);
      $findUser->execute();
      $foundUser = $findUser->fetch(PDO::FETCH_OBJ);

      if($foundUser->Username == $username) {
        echo '
          <div id="pop-up" class="error">
          This username is already in use. Please choose another one.
          </div>
          ';
      }
      elseif ($foundUser->Email == $email) {
        echo '
          <div id="pop-up" class="error">
          This email address is already in use. Please choose another one. <br />
          If you think this is impossible, please
          <a href="http://www.askmephilosophy.co.nf/contact.php">contact us</a>.
          </div>
          ';

每当我尝试注册一个新帐户时,我都会被发送到一个由主机预设的错误页面。所以我得到一个404错误。我很确定问题出在

$findUser = $MyConnection->prepare("SELECT * FROM Users WHERE Username = :username OR Email = :email LIMIT 2");

那段代码我做错了什么?

【问题讨论】:

  • 该代码显然没有问题。当然不会导致 404 错误(未找到 HTTP)
  • 似乎不对的是htmlspecialchars()的使用。如果数据库中的用户名是user&amp;lt;abc,则发送到SELECT 查询的结果将是user&amp;lt;abc,这很可能是错误的。希望您不要在INSERT 之前调用htmlspecialchars()
  • 您有可以在主机上查看的错误日志吗?如果出于某种奇怪的原因,他们将 PHP 错误发送到 404 而不是 500,希望您能在那里找到它。
  • @JesseDijkstra 这是绕过 XSS 的合适方法,但只能用于输出,绝不可用于输入。数据应以其原始状态存储在数据库中。
  • 这里没有 XSS 危险。唯一的危险可能是 SQL 注入,但是当你使用 PDO 和准备好的语句时,你没问题。

标签: php database pdo prepared-statement prepare


【解决方案1】:

404 错误来自找不到文件

<a href="http://www.askmephilosophy.co.nf/contact.php">contact us</a>.

文件http://www.askmephilosophy.co.nf/contact.php 不存在。

在您未显示的代码的某些部分中必须有一些其他文件不存在(在 elseif 之后的 else 中?)。如果用户名和电子邮件都是免费的,则可以调用。

由于http://www.askmephilosophy.co.nf 中的大多数链接都会导致 404 错误,您正在为自己制造麻烦。

所有链接都应该指向真实文件。在内容可用之前,这些 存根 文件应该有一条消息,如“正在建设中”和文件名等。

【讨论】:

  • 我已经删除了该文件的所有链接,但它仍然给我一个错误。此外,为什么会导致错误?用户不会直接发送到该文件。这是一个点击选项。
  • 必须有一些其他文件在您未显示的代码的某些部分中不存在(else after elseif ?)。如果用户名和电子邮件都是免费的,则可以调用。
猜你喜欢
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 2021-08-16
  • 2012-10-28
  • 2013-10-13
相关资源
最近更新 更多