У меня есть следующий запрос к базе данных, который отлично работает, но в другом вопросе ранее мне было доведено до сведения, что я использую глобальный, когда это не нужно. Причиной этого было то, что я попытался использовать защищенную переменную, но был новичком в ООП, не смог заставить его работать.Как использовать защищенную переменную вместо «global» в этом классе?
Возможно, кто-то может показать мне, как это должно быть сделано?
<?
class DB {
public function __construct() {
global $dbh;
try {
$dbh = new PDO('mysql:host=localhost;dbname=main_db', 'my_user', 'my_pass');
$dbh ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo $e->getMessage();
}
}
public function getFAQCats2Array() {
global $dbh;
try {
$q = '
SELECT
`id` AS ci,
`name` AS n
FROM
`faqcat`;
';
$s = $dbh->query($q);
// initialise an array for the results
$A = array();
while ($r = $s->fetch(PDO::FETCH_ASSOC)) {
$A[] = $r;
}
$s = null;
return $A;
}
catch(PDOException $e) {
echo "Something went wrong fetching the list of FAQ categories from the database.\n";
file_put_contents(
$_SERVER['DOCUMENT_ROOT']."/PDOErrors.txt",
"\n\n\n\n".$e->__toString(), FILE_APPEND);
}
}
public function getFAQ($i, $f) {
global $dbh;
try {
$q = '
SELECT
'.$f.'
FROM
faq
WHERE
id = ?
';
$s = $dbh->prepare($q);
$s->execute(array($i));
//$s->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$r = $s->fetch();
return $r[$f];
}
catch(PDOException $e) {
echo "Something went wrong fetching the FAQ answer from the database.\n";
file_put_contents(
$_SERVER['DOCUMENT_ROOT']."/PDOErrors.txt",
"\n\n\n\n".$e->__toString(), FILE_APPEND);
}
}
}
(Были и другие функции в классе, используя ту же строку соединения в $dbh
, но я удалил их ради простоты)
Это уже трюк. Я, конечно, много читал об этом на php.net, но, к сожалению, не смог получить достаточного понимания концепции там, для меня, чтобы реализовать ее. Ценю вашу помощь. –
Я только что обнаружил, что '$ this-> dbh-> query ($ q);' отлично работает, но в другом запросе, который использует '$ this-> dbh-> prepare ($ q);' он дал ошибку , «Вызов функции-члена prepare() для не-объекта». Что я сделал неправильно? –
Как вы называете метод 'prepare()'. Без какой-либо части кода я ничего не могу поделать. – DaGardner