db レイヤーを処理するモデル クラスがいくつかありますが、オブジェクト指向の方法でクエリへの db 接続を渡す方法に論理エラーがあります。Class1 は、class2 クエリ メソッドのコンストラクター内で呼び出している db_connect です。
class db {
public $host = 'localhost';
public $username = 'root';
public $password = '';
public $database = 'molecule';
public $mysqli = '';
function __construct() {
$mysqli = new mysqli($this->host, $this->username, $this->password, $this->database);
if (mysqli_connect_errno()) {
printf("Database Connection failed: %s\n", mysqli_connect_error());
exit();
}
return $mysqli;
}
}
class nodeModel {
public $node;
public $node_name;
public $node_link;
public $node_comment;
public $mysqli;
function __construct() {
$mysqli = new db;
return $mysqli;
}
public $insert;
public $insert_id;
function insertNode($node_name, $node_link, $node_comment) {
$this->insert = $insert;
$this->insert = $mysqli->prepare("INSERT INTO node(node_name, name_link, node_comment) VALUES (?, ?, ?)");
$this->insert->bind_param("sss", $this->node_name, $this->node_link, $this->node_comment);
if($this->insert->execute()) {
$this->insert_id = $mysqli->insert_id;
}
return $this->insert_id;
print_r($this->insert_id);
$this->insert->close();
}}
しかし、$insert で未定義の変数エラーが発生します。
私は次のようにそのレイヤーを呼び出しています:
include 'node_model.php';
$dbTest = new nodeModel;
$node_name = 'My Node Title';
$node_link = 'My Node Link';
$node_comment = 'My Node Comment. This one should be longer so I will write more stuff';
$dbTest->insertNode($node_name, $node_link, $node_comment);
クエリクラスのコンストラクターと接続する方法は機能しているようですが、準備/バインド/実行ステートメントにアタッチするためにスコープ内でどの変数が必要かわかりませんか?
そして、私は PDO または別の ORMy タイプのツールを使用する必要があることを知っています。私はそうしますが、これは基本的なオブジェクト指向の取得/設定/取得のベストプラクティスに関するものです...助けてくれてありがとう。