首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP mySQL连接问题

问PHP mySQL连接问题
EN

Stack Overflow用户
提问于 2010-08-28 07:17:01
回答 3查看 363关注 0票数 1

好吧,我完全被弄糊涂了。

我正在建立一个面向对象的网站。我有一个定义所有数据库参数的类,如下所示:

代码语言:javascript
复制
$db->host= "localhost";
$db->name= "mydatabase";
$db->user= "user";
$db->pw = "password";

该类被正确实例化,并且值显示在装入该类之后出现的页面中。

但是,当我试图从一个不同的类连接到这个数据库时,它没有连接。下面是我是如何连接的:

代码语言:javascript
复制
$dbconn = mysql_connect($db->host, $db->user, $db->pw);
mysql_select_db($db->name, $dbconn);

如果我去掉user、pw和name变量以及正确值中的硬代码,一切都会正常工作,但如果使用db构造引用其中任何一个,则不会发生任何连接。同样,db结构在其他页面上显示得很好,我看到变量值显示正确。但是,$db->主机变量始终有效。

下面是我是如何构造db类的:

代码语言:javascript
复制
class database {
    var $host;
    var $name;
    var $user;
    var $pw;

    function __construct($host = "localhost", $name = "mydatabase", $user = "user", $pw = "password"){
        $this->host =   $host;
        $this->name =   $name;
        $this->user =   $user;
        $this->pw =     $pw;
    }
}

然后我当然会这样做

代码语言:javascript
复制
 $db = new database();

提前感谢您的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-28 07:31:02

对于将密码或用户名作为对象存储的点,请不要使用PDO

  • What's

  • 不要使用PHP4

上

如何解决所有这些问题?

代码语言:javascript
复制
class MyClass {
    protected $db;

    public function __construct(PDO $db) {
        $this->db = $db;
    }

    public function doSth() {
        $this->db->query('..');
    }
}

$db = new PDO('mysql:dbname=mydatabase;host=localhost', 'user', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$obj = new MyClass($db);
$obj->doSth();
票数 2
EN

Stack Overflow用户

发布于 2010-08-28 15:25:55

我认为你在创建初始化数据库类构造函数的对象时没有传递参数。

尝试使用

代码语言:javascript
复制
$db=new database("localhost","dbname","user","password");

然后创建类,如下所示

代码语言:javascript
复制
class database {
   var $host;
   var $name;
   var $user;
   var $pw;

       function __construct($host , $name , $user , $pw ){
        $this->host =   $host;
        $this->name =   $name;
        $this->user =   $user;
        $this->pw =     $pw;
    }

如果单独编写,也可以将这个类作为文件包含进来,并且对于连接,您现在可以编写

代码语言:javascript
复制
$conn=mysql_connect($db->host,$db->user,$db->pw);
mysql_select_db($db->name,$conn);

希望这能有所帮助:)

票数 0
EN

Stack Overflow用户

发布于 2015-08-23 10:32:26

代码语言:javascript
复制
<?php
/*
link.php
Created By Nicholas English
*/
$link = null;
$connection = null;
$servername = "";
$username = "";
$dbname = "";
$pass = "";
$mysqli = null;
$pdo = null;
$obj = null;
$pr = null;
$type = 3;
if ($type === 1) {
$mysqli = true;
$pdo = false;
$obj = true;
$pr = false;
} else {
if ($type === 2) {
$mysqli = true;
$pdo = false;
$obj = false;
$pr = true;
} else {
if ($type === 3) {
$mysqli = false;
$pdo = true;
$obj = false;
$pr = false;
} else {
$mysqli = null;
$pdo = null;
$obj = null;
$pr = null;
}
}
}
if ($mysqli === true && $obj === true) {
$link = new mysqli($servername, $username, $pass, $dbname);
if ($link->connect_error) {
die("Connection failed: " . $link->connect_error);
}
$connection = true;
} else {
if ($mysqli === true && $pr === true) {
$link = mysqli_connect($servername, $username, $pass, $dbname);
if (!$link) {
die("Connection failed: " . mysqli_connect_error());
}
$connection = true;
} else {
if ($pdo === true && $mysqli === false) {
try {
$link = new PDO("mysql:host=$servername;dbname=$dbname", $username, $pass);
$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connection = true;
}
catch(PDOException $e)
{
$connection = null;
echo "Connection failed: " . $e->getMessage();
}
} else {
$link = null;
$connection = null;
}
}
}
if ($connection == null && $link == null) {
$error = 1;
}
?>

使用mysqli或pdo实现更安全的连接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3588720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档