0

つまり、簡単に言えば、このコードは機能するはずだと思います。文字通り、現時点では、情報を取り込んでデータベースに対してコマンドを実行する PHP クラスを作成しようとしています。コマンドが機能することはわかっているので、そうではなく、変数のスコープに関係しています。

私は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@gmail.com"
      ]
      ]))
      {
      echo "User already exists";
    }else{
      $database->insert("customer", [
        "username"=>"username",
        "keyword"=>"keyword",
        "email"=>"email@gmail.com",
        "phone"=>"444-444-4444",
        "first_name"=>"First",
        "last_name"=>"Last"
    ]);
    echo "User added";
  }
  echo "Done";
  }
}
?>

このデータベース エントリを行うために composer と medoo を使用しています。私はそれを単独で実行したので、データベースコードが機能することを知っています。

私が苦労しているの$databaseは、コード内の変数のようです。その変数をミックスから削除すると、関数呼び出しが機能します。変数を宣言する場所/関数内/関数外から変数を参照する方法を理解していないように感じます。ありがとう。

4

2 に答える 2

2

ここでの問題は、グローバル スコープの使用です。それ以外の:

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

使用する

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

コンストラクターで $database をインスタンス化することも検討できます。

private $database;

public function __construct() { 
  $this->database = new medoo([args....
于 2016-12-12T16:38:47.813 に答える
2

前の例で示唆されているように、次のようなものを使用してクラスに 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',    
        ]);

    }

チェックするには、エラーをキャッチすることを検討してください。DB で一意または主キーを使用すると、これを行うより安全な方法になります。それ以外の場合は、DB で検証と検索を行う必要があります。キーを追加し、重複エラーをチェックします。

if($database->error()){
  //deal with return or pass to logging
}
于 2016-12-12T17:17:52.367 に答える