PHP 中的类问题


class problem in php

我是类和对象的新手。在这里,我在类中为mysql数据库连接编写了一些代码,并 object.in 索引.php我有以下代码:

<?php 
  try {
    require_once('./lib/testdb.php');
    $login = new Login();
  }
  catch(Exception $error) {
    print $error->getMessage();
  }

  /* Include the HTML for the form */
  require_once('./lib/form.php');   
?>

对于testdb.php我有以下代码:

<?php
  define("DB_HOST", "localhost");
  define("DB_USER", "root");
  define("DB_PASS", "root");
  class Login{
    private $username;
    private $password;
    public function getUsername() {
      return $this->username;
    }
    public function getPassword() {
      return $this->password;
    }
    public function getEncryptedPassword() {
      return sha1($this->password);
    } 
   public function connectToMySQL() {  
      @mysql_connect(DB_HOST, DB_USER, DB_PASS) OR die("Cannot connect to MySQL server!");  
      mysql_select_db("dd") OR die("Cannot select database!");
    }

    public function verifyLogin($username, $password) {
      $this->username = $username;
      if(empty($username) || empty($password)) {
        throw new Exception(Login::ERROR_EMPTY_LOGIN);
      }  
      else {
      $query = sprintf("SELECT * FROM 'users' WHERE username = '%s' AND 
            userpass = sha1('%s') ");
            $this->clean($username),
            $this->clean($password));

      $result = mysql_query($query) OR die('Cannot perform query!');  
        while($info = mysql_fetch_array( $result )) 
      {
          echo $info['username'];
      }
}
?>

数据库部分如下所示:

--
-- Database: `login`
--
-- --------------------------------------------------------
--
-- Table structure for table `login`
--
CREATE TABLE IF NOT EXISTS `login` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(80) NOT NULL,
  `password` varchar(80) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `login`
--
INSERT INTO `login` (`id`, `username`, `password`) VALUES
(1, 'ajay', 'password');

问题是它没有从数据库中获取任何数据或没有任何内容,它显示"无法执行查询"。所以请指导我。这是我在课堂和对象中的第一个项目。

您的 sprintf 语句中有一个错误:

$query = sprintf("SELECT * FROM 'users' WHERE username = '%s' AND 
        userpass = sha1('%s') ");    // here
        $this->clean($username),
        $this->clean($password));

应该是:

$query = sprintf("SELECT * FROM 'users' WHERE username = '%s' AND 
        userpass = sha1('%s') ",    // corrected
        $this->clean($username),
        $this->clean($password));

由于该错误,您没有将用户名和密码添加到查询中。

必须使用括号构造: new Login();new Login;

<?php 
  try {
    require_once('./lib/testdb.php');
    $login = new Login();
  }

使用mysql_error()找出真正的问题是什么。

$result = mysql_query($query) OR die('Cannot perform query: ' . mysql_error());  

保持一定的理智和生产力,并开始查看 mysql 日志文件中的最后一行是否存在这些类型的简单错误。

或者,为了暂时确定问题是什么

echo $query;