0

私は顧客データベースを書いています。このように見えるすべての顧客を表示する機能があります。

<?php
class customer{

public function getAllCustomers(){
    global $database;
    $query = $database->query('SELECT * FROM hs_customers');
    $result = $database->statement->fetchAll();
    return $result;
}
}
?>

ここまではすべてうまくいきます。その接続、データの取得など。私が不満を持っている唯一のことは、データベース名を関数内にハードコーディングしたくないことです。さらに、変数に置き換えたいと思っています。したがって、idは次のことを行いました(以前と同じように、うまくいきました)が、突然変数を置き換えなくなりましたか?...

<?php
class customer{

private $customerDB = 'hs_customers';

public function getAllCustomers(){
    global $database;
    $query = $database->query('SELECT * FROM :db', array(':db' => $customerDB));
    $result = $database->statement->fetchAll();
    return $result;
}
}
?>

私は何か間違っていると思います。何かアドバイス?前もって感謝します。

4

3 に答える 3

4

PHP は、$thisメソッド内からクラス メンバーにアクセスするときに使用する必要があります。

array(':db' => $this->customerDB)
于 2012-09-21T15:00:08.223 に答える
1

SQL で使用される構文で変数コンテナを使用することはできません。たとえば、 aやなどtable nameの構文に関連するその他のものです。したがって、これを動的に行うには、SQL 文字列をエスケープして、次のように使用する必要があります。ordergroup

$query = $database->query('SELECT * FROM '.($this->customerDB));

-- @TimG の更新

また、クラス環境にいるため、変数$customerDBはクラス プロパティとして扱う必要があります。クラスのプロパティを使用するには、$this->割り当てを使用する必要があります。その場合、静的でない限り、を使用しますself::

于 2012-09-21T15:11:39.437 に答える
0

変数を置換できるようにしたい場合は、次のprepareようなステートメントを使用する必要があります。

$Var1 = 'Allo';
$Var2 = 30;

$Query = $DB->prepare('SELECT * FROM Table WHERE Field1 = :Data1 AND Field2 = :Data2');
$Query->bindValue(':Data1', $Var1, PDO::PARAM_STR);
$Query->bindParam(':Data2', $Var2, PDO::PARAM_INT);
$Query->execute();

bindValue値をクエリに直接バインドします。

bindParam変数名を「静的」としてバインドします。を実行する前に変数を編集すると、変数executeの内容が続きます。

また、あなたの場合、$this->customerDBではなくを使用する必要があります$customerDB。参照している変数はクラス内にあり、$thisクラス レベルのコンテンツにアクセスするために使用します。

于 2012-09-21T15:01:42.503 に答える