PHP面向对象编程MySQL连接

3

好的,我是一名完全新手,在php中使用面向对象编程,我尝试着从简单的开始,但是结果并不如我所期望的那样。

<?php 

class mySQL{

  var $host;
  var $username;
  var $password;
  var $database;

  public function connect($set_host, $set_username, $set_password, $set_database){
    $this->host = $set_host;
    $this->username = $set_username;
    $this->password = $set_password;
    $this->database = $set_database;

    mysql_connect("$host", "$username", "$password")or die("cannot connect");
    mysql_select_db("$database")or die("cannot select DB");

  }

}

$connect = new mySQL();
$connect -> connect('localhost', 'user', 'pass', 'database1');

$settings_query = mysql_query("SELECT * FROM settings");
$settings = mysql_fetch_array($settings_query);

echo $settings['title']; 

?>

我只看到我的页面上显示“无法连接”。

2
我认为你应该从PDO开始,它在长期使用中会更有用。http://www.php.net/manual/zh/intro.pdo.php - Paul
我希望我能给你点赞一千次,Paul。这个脑残的mysql扩展必须清除。 - Charles
我完全赞同你的评论,Charles! - Chris
6个回答

6
在您的connect方法中,您试图使用以下变量: $host $username $password $database 这些变量是局部变量,只存在于您的connect()方法中。 但是这些变量不存在。
相反,如果您想要使用在您的类中定义的属性$host、$username和$password,您必须使用$this来访问它们: $this->host $this->username $this->password $this->database

想了解更多信息,请查看PHP手册的this page -- 你可能还想阅读更多关于类和对象的内容。


1
class mySQL{

  var $host;
  var $username;
  var $password;
  var $database;
  public $dbh;  //Variable for storing connection

  public function connect($set_host, $set_username, $set_password, $set_database){
    $this->host = $set_host;
    $this->username = $set_username;
    $this->password = $set_password;
    $this->database = $set_database;

    $this->dbh = mysql_connect($this->host, $this->username, $this->password)or die("cannot connect"); //Store data connection specifier in object
    mysql_select_db($this->database)or die("cannot select DB");

  }

  public function query($sql)
  {
       return mysql_query($sql,$this->dbh);  //Specify connection handler when doing query
  }

  public function fetch($sql)
  {
       return mysql_fetch_array($this->query($sql));
  }

}
$connect = new mySQL();
$connect->connect('localhost', 'user', 'pass', 'database1');
$settings_query = mysql_query("SELECT * FROM settings", $connect->dbh); //Specify connection handler when doing query
$settings = mysql_fetch_array($settings_query);

//With query method in object you can do this:    
$settings_query = $connect->query("SELECT * FROM settings");  //Use object method to query
$settings = mysql_fetch_array($settings_query);

//with fetch method in object you can just do this:
$settings = $connect->fetch("SELECT * FROM settings");

echo $settings['title']; 

指定连接处理程序,特别是使用查询方法,可以轻松地执行以下操作:

$connect1 = new MySQL();
$connect2 = new MySQL();
$connect1->connect('localhost','user','pass','database1');
$connect2->connect('localhost','user','pass','database2');

可以轻松处理多个SQL对象/数据库连接,并帮助消除可能出现的任何混淆。

当然,这还包括在自身内部正确引用对象变量($this->var)。


1
mysql_connect("$host", "$username", "$password")or die("cannot connect");

$host 在任何地方都没有定义。根据您上面的代码,它需要是 mysql_connect( $this->host, $this->username, $this->password );

或者你只是复制粘贴了 mysql 连接行?


0

改为

mysql_connect( $this->host,  $this->username, $this->password)or die("cannot connect");

0

你可能想要使用$this

mysql_connect("{$this->host}", "{$this->username}", "{$this->password}")or die("cannot connect");
mysql_select_db("{$this->database}")or die("cannot select DB");

你有什么理由不必要地把它们放在字符串中吗? - alex

0
class mySQL{

  public function connect($set_host, $set_username, $set_password, $set_database){

    mysql_connect("$set_host", "$set_username", "$set_password")or die("cannot connect");
    mysql_select_db("$set_database")or die("cannot select DB");

  }

}

实际上,这对我来说似乎很好用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接