2016-12-12 3 views
0

Итак, просто поставьте, я чувствую, что этот код должен работать. Буквально в этот момент я просто пытаюсь создать класс PHP, который принимает некоторую информацию и запускает команду против базы данных. Я знаю, что команда работает, так что дело не в этом, это как-то связано с объемом моих переменных.PHP Page Blank - Непонимание областей применения

Я новичок в PHP, и было интересно обрабатывать.

<?php 
require __DIR__ . '/../bin/composer/vendor/autoload.php'; 

$cx = new Customer(); 
$cx->WriteCxToDB(); 

class Customer { 
    public $database = new medoo([ 
    'database_type'=>'mysql', 
    'database_name'=>'dbname', 
    'server'=>'localhost', 
    'username'=>'dbusername', 
    'password'=>'dbpassword', 
    'charset'=>'utf8' 
    ]); 

    public function WriteCxToDB(){ 
    global $database; 
    if($database->has("customer", [ 
     "OR"=>[ 
     "username"=>"cxusername", 
     "email"=>"[email protected]" 
     ] 
     ])) 
     { 
     echo "User already exists"; 
    }else{ 
     $database->insert("customer", [ 
     "username"=>"username", 
     "keyword"=>"keyword", 
     "email"=>"[email protected]", 
     "phone"=>"444-444-4444", 
     "first_name"=>"First", 
     "last_name"=>"Last" 
    ]); 
    echo "User added"; 
    } 
    echo "Done"; 
    } 
} 
?> 

Я использую композитор и medoo для ввода этой записи в базу данных. Я знаю, что код базы данных работает, потому что я запускал его самостоятельно, и он работает нормально.

То, с чем я борюсь, кажется, является переменной $database в коде. Вызов функции работает, если я удаляю эту переменную из микса. Я чувствую, что просто не понимаю, где я должен объявить переменную/как ссылаться на нее изнутри/вне функции. Благодарю.

+1

Всякий раз, когда вы получаете пустую страницу на PHP, когда какой-то вывод ожидался иначе, проверьте свои журналы ошибок. Включать display_errors всегда при разработке и тестировании кода - любая фатальная ошибка должна появляться немедленно. В верхней части вашего скрипта: 'error_reporting (E_ALL); ini_set ('display_errors', 1); ' –

+1

Я заметил, что вы использовали' global $ database', но у вас также есть атрибут '$ database', определенный в классе, который будет доступен как' $ this-> database'. .. –

+0

Создание экземпляра класса '$ database' при объявлении свойства не является одним из примеров, приведенных в http://php.net/manual/en/language.oop5.properties.php, поэтому я бы представлял ваш отчет об ошибках отключается, поэтому вам нужно либо включить его, либо проверить журналы ошибок. – MonkeyZeus

ответ

1

Как было отмечено в предыдущем примере вы должны использовать что-то вроде этого и передать соединение db в класс, расширение базового класса позволит повторно использовать соединение db:

private $database; 

public function __construct($db_connection = null){ 
    //do stuff or set db 
    $this->database = $this->db_connect; 
} 

ИЛИ сделать метод в классе, чтобы сделать это

private function db_connect(){ 
     return new medoo([ 
     // required 
     'database_type' => 'mysql', 
     'database_name' => 'name', 
     'server' => 'localhost', 
     'username' => 'your_username', 
     'password' => 'your_password', 
     'charset' => 'utf8',  
     ]); 

    } 

проверить рассмотреть ловя ошибки. Использование уникального или первичного ключа в БД было бы более безопасным способом сделать это, иначе вы должны выполнить проверку и поиск в БД. Добавьте ключи и проверьте наличие повторяющихся ошибок.

if($database->error()){ 
    //deal with return or pass to logging 
} 
+0

Спасибо - создание конструктора показало, что все работает лучше, и я смог добиться этого. – Entevily

1

Проблема здесь в использовании глобальной сферы. Вместо того, чтобы:

global $database; 
    if($database->has("customer", 

использование

if($this->database->has("customer", 

вы могли бы также рассмотреть вопрос о создании экземпляра $ базы данных в конструкторе, т.е.

private $database; 

public function __construct() { 
    $this->database = new medoo([args....