2016-08-26 3 views
-1

Не знаю, где мой PHP неправильно:Не удается подключиться к БД в PHP

class BDConnection{ 


     private $_bdname; 
     private $_root; 
     private $_address; 

     function __construct(){ 

      $this->$_address = 'localhost'; 
      $this->$_bdname = 'Vuelos'; 
      $this->$_root = 'root'; 
     } 

     static function link($con){ 

      $connection = mysqli_connect("$con->_address","$con->_root","","$con->_bdname") or die("Problemas con la conexión"); 

      return $connection; 
     } 

     static function close($con){ 

      mysqli_close($con); 

      return; 
     } 


    } 

Казни часть:

$connection = new BDConnection(); 
$conexion= BDConnection::link($connection); 

И ошибка, которая дает мне:

Notice: Undefined variable: _address in C:\xampp\htdocs\EjerPHP\PruebaFormularios\BDConnection.php on line 12 

    Fatal error: Uncaught Error: Cannot access empty property in C:\xampp\htdocs\EjerPHP\PruebaFormularios\BDConnection.php:12 
Stack trace: #0 C:\xampp\htdocs\EjerPHP\PruebaFormularios\PasajeroVueloconForm.php(31): BDConnection->__construct() #1 {main} thrown in C:\xampp\htdocs\EjerPHP\PruebaFormularios\BDConnection.php on line 12 

Не знаете, почему он не признает $ _address и что может быть неправильным

+0

Вы смешиваете статические и «динамические» вызовы. –

+0

Я новичок в PHP, не могли бы вы объяснить? –

+1

В вашей функции __construct измените '$ this -> $ _ address = 'localhost'' на' $ this -> _ address =' ​​localhost'' (удалите $ из $ _address). То же самое для других 2 строк. – Ibrahim

ответ

1

Много и много грузопассажирские культового программирования:

function __construct(){ 

     $this->$_address = 'localhost'; 
     $this->$_bdname = 'Vuelos'; 
     $this->$_root = 'root'; 
       ^^^^^^ 

$_root не определено в этой точке, так что вы эффективно пытаются сделать $this->null = 'root'. Все эти $_ должны быть JUST_.

Все переменные переменной "$con->_address" также являются избыточными. Нет смысла делать "$var", просто используйте $var.

+0

Все переменные типа $ con -> _ address также являются избыточными. Нет смысла делать «$ var», просто используйте $ var. Не поймал это, не могли бы вы привести мне пример (я начал php на этой неделе) –

+0

как сказано, я ввожу переменную в '' ... "' самостоятельно, поэтому вы буквально имеете '' $ var " Бессмысленно. Это просто делает php build ANOTHER string из уже существующей строки. о единственном времени, которое имеет значение, если '$ var' - это объект, который реализует __toString(), и здесь это не так. –

+0

Получил это сейчас. Благодаря! –

0
<?php 
class BDConnection{ 
    private $dbname; 
    private $username; 
    private $host; 

    function __construct(Array $credentials){ 

     $this->host = $credentials['HOST']; 
     $this->dbname = $credentials['DB_NAME']; 
     $this->username = $credentials['USERNAME']; 
    } 

    static function link(BDConnection $connection){ 

     return mysqli_connect($connection->host,$connection->username,"",$connection->dbname) or die("Problemas con la conexión"); 
    } 

    static function close(BDConnection $con){ 

     mysqli_close($con); 

     return; 
    } 


} 
$credentials = ['HOST'=>'localhost','DB_NAME'=>'songs','USERNAME'=>'root']; 
$connection = new BDConnection($credentials); 
$conexion= BDConnection::link($connection); 
+0

Мое намерение заключалось не в том, чтобы иметь учетные данные в основном классе, а чтобы он был инкапсулирован в класс BDConnection. Почему я должен создать массив $ credentials? –

+0

Конечно, вы можете жестко привязать его к __construct, как и раньше, но я предпочитаю вводить учетные данные извне, так что это нехорошо писать учетные данные прямо в __construct. Я бы порекомендовал вам прочитать о впрыске зависимостей, я бы использовал Pimple https://www.sitepoint.com/dependency-injection-with-pimple/ – Pianist

Смежные вопросы