Проблемы с PHP в MySQL - PullRequest
       10

Проблемы с PHP в MySQL

1 голос
/ 28 августа 2010

Хорошо, я полностью сбит с толку.

Я настраиваю ОО-сайт.У меня есть класс, который определяет все мои параметры базы данных следующим образом:

$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);

Все работает нормально, если я вывожу переменные user, pw и name и жесткий код в правильных значениях, но если на любую из них ссылаются с помощью конструкции db, нетсоединение происходит.Опять же, конструкция db отлично выглядит на других страницах, и я вижу, что значения переменных представлены правильно.Переменная $ db-> host, однако, всегда работает.

Вот как я создаю класс 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 ]

2 голосов
/ 28 августа 2010
  1. Не используйте PHP4
  2. Почему бы вам просто не использовать PDO
  3. Какой смысл хранить пароль или имя пользователя в качестве свойства объекта?
  4. Возможно, проблема в $db переменной области действия

Как все это исправить?

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();
0 голосов
/ 23 августа 2015
<?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 голосов
/ 28 августа 2010

Я думаю, вы не передаете параметры при создании объекта для инициализации конструктора класса базы данных.

попробуйте использовать

$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);

Надеюсь, это помогло:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...