ребята, пытаюсь написать класс для работы с MySQL для PHP 7, уже все перепробовал, не хочет работать... Еще момент, что в PHP 7 используется вместо $this в классах? Короче, мои классы в PHP 7 не работают (использую mysqli)... Помогите с написанием конструктора и как мне к классам обращаться без self::, parent:: или ClassName:: ? Только начал въезжать в эту версию языка. Спасибо
Код (Text): <?php class Database { function __construct() { $link = new mysqli('localhost', 'root', '123qweznoxiu', 'bearings') ; if (!$link) { echo "Ошибка: Невозможно установить соединение с MySQL." . PHP_EOL; echo "Код ошибки errno: " . mysqli_connect_errno() . PHP_EOL; echo "Текст ошибки error: " . mysqli_connect_error() . PHP_EOL; exit; } echo "Соединение с MySQL установлено!" . PHP_EOL; echo "Информация о сервере: " . mysqli_get_host_info($link) . PHP_EOL; } function SelectFrom($table, $fields) { $result = mysql_query ("SELECT ".$fields." FROM `".$table."`"); if ($result) { $num = mysql_num_rows($result); $i = 0; while ($i < $num) { $data[$i] = mysql_fetch_assoc($result); $i++; } // $result = array('cities'=>$cities); } else { $data = array('type'=>'error'); } return $data; } function testClass() { //чисто проверка, виден класс или нет echo '<p>It works!</p>'; } } ?> --- Добавлено --- Код (Text): <?php class Database { function __construct() { $link = new mysqli('localhost', 'root', '123qweznoxiu', 'bearings') ; if (!$link) { echo "Ошибка: Невозможно установить соединение с MySQL." . PHP_EOL; echo "Код ошибки errno: " . mysqli_connect_errno() . PHP_EOL; echo "Текст ошибки error: " . mysqli_connect_error() . PHP_EOL; exit; } echo "Соединение с MySQL установлено!" . PHP_EOL; echo "Информация о сервере: " . mysqli_get_host_info($link) . PHP_EOL; } function SelectFrom($table, $fields) { $result = mysql_query ("SELECT ".$fields." FROM `".$table."`"); if ($result) { $num = mysql_num_rows($result); $i = 0; while ($i < $num) { $data[$i] = mysql_fetch_assoc($result); $i++; } // $result = array('cities'=>$cities); } else { $data = array('type'=>'error'); } return $data; } function testClass() { echo '<p>It works!</p>'; } } ?> --- Добавлено --- ECHO я оставил просто проверить,как функция работает... Было еще куча вариация на тему, ничего не работает --- Добавлено --- И вот класс, который его использует (см. ниже). Сам класс рабочий, автоподгрузка работает, виды загружаются... Но, к функциям приходится обращаться не через $this, а self и прочие... А БД, вообще, не работает
У тебя такая каша в коде это ад,а помимо этого хочешь использовать mysqli а по факту делаешь mysql_query
У меня для работы с Wordpress такое. Функция connect_db() вызывается в __construct основного класса, и её результат записывается в $this->db. PHP: function connect_db() { include($this->site_dir.'wp-config.php'); $db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); if (mysqli_connect_errno()) { $this->error_tpl('Не удалось подключиться к базе данных', mysqli_connect_error()); die(); } if (!mysqli_set_charset($db, "utf8")) { $this->error_tpl('Ошибка базы данных', mysqli_error($db)); die(); } return $db; } function query($query) { return mysqli_query($this->db, $query); } function escape($text) { return mysqli_real_escape_string($this->db, $text); }
И вот класс, который его использует (см. ниже). Сам класс рабочий, автоподгрузка работает, виды загружаются... Но, к функциям приходится обращаться не через $this, Как лучше написать запрос?
Эта уже не помню, какая каша в коде... Подскажите, как лучше написать класс и к нему обращаться? В контроллере или модели? Я что-то запутался. Спасибо
в php7 не работает mysql, переписывайте на mysqli, т.е. запрос должен быть $result = mysqli_query ($link, "SELECT ".$fields." FROM `".$table."`");
Не работает....: Код (Text): <?php class Database { function __construct() { $link = new mysqli('localhost', 'root', '123qweznoxiu', 'bearings') ; if (!$link) { echo "Ошибка: Невозможно установить соединение с MySQL." . PHP_EOL; echo "Код ошибки errno: " . mysqli_connect_errno() . PHP_EOL; echo "Текст ошибки error: " . mysqli_connect_error() . PHP_EOL; exit; } echo "Соединение с MySQL установлено!" . PHP_EOL; echo "Информация о сервере: " . mysqli_get_host_info($link) . PHP_EOL; } function SelectFrom($table, $fields) { $result = mysql_query ("SELECT ".$fields." FROM `".$table."`", $this->link); if ($result) { $num = mysql_num_rows($result); $i = 0; while ($i < $num) { $data[$i] = mysql_fetch_assoc($result); $i++; } } else { $data = array('type'=>'error'); } return $data; } function testClass() { echo '<p>It works!</p>'; } } ?> --- Добавлено --- Уже лучше, результат работы (print_r($bt)): Array ( [type] => error )
Это класс БД: Код (Text): <?php class Database { function __construct() { $link = new mysqli('localhost', 'root', '123qweznoxiu', 'bearings') ; if (!$link) { echo "Ошибка: Невозможно установить соединение с MySQL." . PHP_EOL; echo "Код ошибки errno: " . mysqli_connect_errno() . PHP_EOL; echo "Текст ошибки error: " . mysqli_connect_error() . PHP_EOL; exit; } echo "Соединение с MySQL установлено!" . PHP_EOL; echo "Информация о сервере: " . mysqli_get_host_info($link) . PHP_EOL; } function SelectFrom($table, $fields) { $result = mysqli_query ("SELECT ".$fields." FROM `".$table."`"); if ($result) { $num = mysql_num_rows($result); $i = 0; while ($i < $num) { $data[$i] = mysql_fetch_assoc($result); $i++; } // $result = array('cities'=>$cities); } else { $data = array('type'=>'error'); } return $data; } function testClass() { echo '<p>It works!</p>'; } } ?> Это контроллер: Код (Text): <?php class Welcome extends Inm_Controller { //static $db = new Database; //Кстати,это не работает /// public function index() { $bt = Database::SelectFrom($table = 'bearing_tables', $fields='id'); print_r ($bt); } } ?> Это результат вывода: Array ( [type] => error ) --- Добавлено --- как лучше написать? Сейчас я изучаю, как обращаться к функциям внутри класса на PHP 7, пытаюсь просто к БД подключиться, чтобы потом допиливать... Вот на работе с БД и застрял (((
https://php.ru/manual/book.mysqli.html наверное еще сюда можно взглянуть https://php.ru/manual/language.oop5.inheritance.html
как лучше написать? Сейчас я изучаю, как обращаться к функциям внутри класса , того, пытаюсь просто Я через mysqli никогда не работал.. У меня два сайта, один еще на php4 написан (старый очень), эта функция там и работает исправно.. Второй - тупо парсер, там тоже без mysqli... --- Добавлено --- Вот так выдает результат: Код (Text): function SelectFrom($table, $fields) { $link = new mysqli('localhost', 'root', '123qweznoxiu', 'bearings') ; // с этим работает, без этого нет $result = mysqli_query ($link, "SELECT ".$fields." FROM `".$table."`"); if ($result) { $num = mysqli_num_rows($result); $i = 0; while ($i < $num) { $data[$i] = mysqli_fetch_assoc($result); $i++; } } else { $data = array('type'=>'error'); } return $data; } Вопрос, как сделать конструктор класса, чтобы подключение вынести за пределы функции или, может, подклчение, вообще, в другой класс воткнуть и просто обращаться в переменной $link к нему... Как думаете, оправданный подход? --- Добавлено --- Вынес подключение к БД в отдельный класс и все работает...
Вопрос, как сделать конструктор класса, чтобы подключение вынести за пределы Сделал проще: Код (Text): <?php class DBconnect { public function db1() { $link = new mysqli('localhost', 'root', '123qweznoxiu', 'bearings') ; return $link; } } ?> И использую в классе: Код (Text): <?php class Database { function SelectFrom($table, $fields) { $DBconnect = DBconnect::db1(); $result = mysqli_query ($DBconnect, "SELECT ".$fields." FROM `".$table."`"); if ($result) { $num = mysqli_num_rows($result); $i = 0; while ($i < $num) { $data[$i] = mysqli_fetch_assoc($result); $i++; } } else { $data = array('type'=>'error'); } return $data; } } ?> Может. не совсем валидно, но компактно и работает, также подумаю, как использовать несколько подключений к разным бд
зачем класс, можно проще, как то так: PHP: $link = mysqli_connect('localhost', 'root', '123qweznoxiu', 'bearings'); function SelectFrom($fields) { global $link, $table; $result = mysqli_query ($link, "SELECT ".$fields." FROM `".$table."`"); if ($result) { $num = mysqli_num_rows($result); $i = 0; while ($i < $num) { $data[$i] = mysqli_fetch_assoc($result); $i++; } } else { $data = array('type'=>'error'); } return $data; }
@marsik ну да я за свою жизнь видел только один проект с двумя бд. но мода пошла на ооп ради одного объекта так что(((((
SAPI mysql_ было удалено из PHP7. Используйте mysqli_. И включите отображение ошибок, чтобы сразу видеть проблемы. --- Добавлено --- Сколько лет mysql_ уже deprecated было? Лет 5? И все равно свершилось неизбежное - когда его вконец выпилили, это стало неожиданностью.
Начиная с 5.5 объявлено depricated,но это ладно, не все читают миграции.Меня удивляет больше что люди либо вообще не заглядывают в документацию,что в целом очень плохо,либо заглядывают и игнорируют вот это: