代码之家  ›  专栏  ›  技术社区  ›  Gary

php-mysql连接问题

  •  1
  • Gary  · 技术社区  · 14 年前

    好吧,我完全困惑了。

    我正在建立一个OO站点。我有一个类,它定义了我的所有数据库参数,如下所示:

    $db->host= "localhost";
    $db->name= "mydatabase";
    $db->user= "user";
    $db->pw = "password";
    

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

    但是,当我尝试从其他类连接到此数据库时,它不会连接。以下是我的联系方式:

    $dbconn = mysql_connect($db->host, $db->user, $db->pw);
    mysql_select_db($db->name, $dbconn);
    

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

    下面是我如何构造DB类:

    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;
        }
    }
    

    然后我当然会

     $db = new database();
    

    提前感谢您的帮助!

    3 回复  |  直到 9 年前
        1
  •  2
  •   Crozin    14 年前
    1. 不要使用PHP4
    2. 你为什么不直接用 PDO
    3. 将密码或用户名存储为对象属性有什么意义?
    4. 可能问题是 $db variable scope

    如何解决所有这些问题?

    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
  •  0
  •   anurag-jain    14 年前

    我认为在创建用于初始化数据库类构造函数的对象时,U不会传递参数。

    试用使用

    $db=new database("localhost","dbname","user","password");
    

    然后将类创建为

    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;
        }
    

    如果单独编写,也将此类作为文件包含在内 对于连接,你现在可以写

    $conn=mysql_connect($db->host,$db->user,$db->pw);
    mysql_select_db($db->name,$conn);
    

    希望这有帮助:)

        3
  •  0
  •   Affix Programmer    9 年前
    <?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进行更安全的连接