0

質問を編集してより明確にするので、私が今得たものを確認し、問題をより簡単に理解できるようになります。

<?php
$mysqli = new mysqli("localhost", "user", "password", "test");
class building
{
private $mysqli;
public $buildingid;
public $userid;
public $buildinglevel;




public function __construct($buildingid, $userid, \mysqli $mysqli)
{
    $this->buildinglevel;
    $this->mysqli = $mysqli;
}

public function getLevel()
{
    return $this->mysqli->query("SELECT ".$this->buildingid." FROM worlds WHERE city_userid=".$this->userid."");
}
}

}
?>

次に、これを使用して関数を作成して使用します。

$cityHall = new building("cityHall",$user['id'],$mysqli);
echo $cityHall->getLevel();

これは空白になり、何も起こりません。

4

3 に答える 3

2

mysqli のインスタンスを構築クラスの __construct() に注入する必要があります。

$mysqli = new mysqli('user', 'password', 'localhost', 'test');

if ($mysqli->connect_errno) { printf("接続に失敗しました: %s\n", $mysqli->connect_error); }

class building
{
private $mysql;
private $buildingid;
private $userid;

// I need to have a mysqli_query here to get the info for the correct building, 
//to be able to set the "buildinglevel" for each object from the MYSQL DB, seems basic   
//but none of the things ive tried has worked.


public function __construct($buildingid, $userid, $mysqli)
{
    $this->buildinglevel;
    $this->mysqli = $mysqli;
    $this->userid = (int)$userid;
    $this->buildingid= (int)$buildingid;
}

public function getLevel()
{
    $query = $this->mysqli->query("SELECT ".$this->buildingid." FROM worlds WHERE city_userid=".$this->userid);
    $row = $query->fetch_assoc();
    if (!$query) {
        return $this->mysqli->error;
    }
    if ($query->num_rows == 0) {
        return 'no database records found';
    }

    return $row;
}

}

$Bulding = new building("cityHall", $user['id'], $mysqli);
$level = $Bulding->getLevel();
var_dump($level);
于 2013-10-10T11:06:32.847 に答える
0

あなたのクラスがあるように見えるのは、モデルとして知られているものです。それは、あなたの場合は特定の建物である何らかの形式のデータを表しています。

1 つの方法は、MySQLi オブジェクトをコンストラクター オブジェクトとして渡し、クエリを実行する建物の ID を渡し、結果をクラス プロパティに割り当てることです。これは次のようになります。

<?php
class Building
{
    private $db;

    protected $id;
    protected $level;

    public function __construct(mysqli $db, $id = null)
    {
        $this->db = $db;

        if (!is_null($id) && intval($id) > 0) {
            $stmt = $this->db->prepare("SELECT buildingid, buildinglevel FROM building WHERE `id` = ?");
            $stmt->bind_param('i', $id);
            $stmt->execute();
            $stmt->bind_result($this->id, $this->level);
            $stmt->fetch();
        }
    }

    public function getId()
    {
        return (int)$this->id;
    }

    public function getLevel()
    {
        return (int)$this->level;
    }
}

次に、次のように建物のプロパティを取得できます。

$building = new Building($mysqli, 1);

printf('Building ID is %d and building level is %d', $building->getId(), $building->getLevel());
于 2013-10-10T11:14:07.013 に答える