класс — PHP: Как использовать приготовить на объекте базы данных?

Я пытался установить соединение с базой данных php, используя класс, который наконец работает.
Мой класс выглядит так:

class Db {
protected static $connection;

public function connect() {

if(!isset(self::$connection)) {
self::$connection = new mysqli('localhost','root','','Personenverzeichnis');
}

if(self::$connection === false) {
return false;
}
return self::$connection;
}

public function query($query) {
$connection = $this -> connect();
$result = $connection -> query($query);
return $result;
}

public function select($query) {
$rows = array();
$result = $this -> query($query);
if($result === false) {
return false;
}
while ($row = $result -> fetch_assoc()) {
$rows[] = $row;
}
return $rows;
}

public function error() {
$connection = $this -> connect();
return $connection -> error;
}public function quote($value) {
$connection = $this -> connect();
return "'" . $connection -> real_escape_string($value) . "'";
}

}

Затем я использую этот класс в своем php-коде так:

$db = new Db();
$abfrage = "SELECT `Date`,`Keyword` FROM `notes` WHERE `PERSON_ID` =
2 ORDER BY `Date` DESC; ";
$resultat = $db -> query($abfrage);

while($daten = $resultat->fetch_object() ){
echo "<p>date ".$daten->Date.": ".$daten->Keyword."</p>";
}

Таким образом, он прекрасно работает. Но как я могу использовать метод prepare ()?

Я попробовал этот код, который не работает. Кто-нибудь может мне помочь?

$db = new Db();
$abfrage = "SELECT `Date`,`Keyword` FROM `notes` WHERE `PERSON_ID` = 2
ORDER BY `Date` DESC; ";
$resultat = $db->prepare($abfrage);
$resultat->execute();
$resultat->bind_result($date, $keyword);

while($daten = $resultat->fetch_object() ){
echo $date .": " .$keywords ."<br>";
}

Способ приготовления неизвестен. Как решить эту проблему?

2

Решение

$dbв вашем случае, это экземпляр Db класс, который вы создали, таким образом, имеет только те методы, которые вы определили на нем. Вы не определили prepare метод, поэтому не может вызвать его. Я бы добавил один, похожий на query метод, но вместо этого вызывает mysqli::prepare.

public function prepare($query) {
$connection = $this -> connect();
$stmt = $connection -> prepare($query);
return $stmt;
}
1

Другие решения

Так как $ db является экземпляром вашего класса Db,

$db = new Db();

Вы можете использовать только методы, определенные в классе

class Db {
public function connect() {}
public function query($query) {}
public function select($query) {}
public function error() {}
public function quote($value) {}
}

Поскольку у вас не определен метод «prepare», вы не сможете использовать подготовленные операторы так, как вы этого хотите. Включение функциональности подготовленных операторов в ваш класс Db будет слишком сложным и ничего не даст.

Вместо этого я бы просто обошел ваш Db Class и получил бы прямой доступ к драйверу mysqli:

$db = new mysqli('localhost','root','','Personenverzeichnis');
$abfrage = "SELECT `Date`,`Keyword` FROM `notes` WHERE `PERSON_ID` = 2
ORDER BY `Date` DESC; ";
$resultat = $db->prepare($abfrage);
$resultat->execute();
$resultat->bind_result($date, $keyword);

while($daten = $resultat->fetch_object() ){
echo $date .": " .$keywords ."<br>";
}
1

prepare() функция, о которой вы говорите, является методом mysqli, а не из вашей базы данных.
То, как вы реализовали свой connect метод, который вы могли бы просто сделать это:

...
$db = new Db();
$mysqli = $db->connect();
$stmt = $mysqli->prepare( ... );
...
0
По вопросам рекламы [email protected]