Привет. Пытаюсь изменить доступ к бд с mysqli на PDO. connect - PHP: function connectPDO(){ $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); } $mysql = false; function connectDB(){ global $mysqli; $mysqli = new mysqli('127.0.0.1', 'root', '', 'mainDB'); if (!$mysqli->connect_errno) $mysqli->set_charset('utf8'); } function closeDB(){ global $mysqli; $mysqli->close(); } mysqli который работал идеально: PHP: function getTags(){ global $mysqli; connectDB(); $tagsResult = $mysqli->query("SELECT * FROM `tags` ORDER BY `id`"); closeDB(); return resultToArrayTags ($tagsResult); } function resultToArrayTags ($tagsResult){ $array = array(); while (($row = $tagsResult->fetch_assoc()) != false ) $array[] = $row; return $array; } и новый PDO, в котором ошибка, похоже - PHP: function getTags(){ connectPDO(); $tagsResult = $pdo->query("SELECT * FROM `tags` ORDER BY `id`"); return resultToArrayTags ($tagsResult); } function resultToArrayTags($tagsResult){ $array = array(); while ($row = $tagsResult->fetch( PDO::FETCH_ASSOC )) { $array[] = $row; } return $array; } а так я получаю теги в index.php - PHP: <head> <?php require_once "functions/function.php"; $tags = $getTags(); </head> <body id="scroll"> <ul> <?php for ($i=0; $i < count($tags); $i++) { echo "<li сlass='tagLi'><a href='{$tags[$i]['alias']}' id='{$tags[$i]['id']}' class='canDisable'>{$tags[$i]['name']}</a></li>"; } ?> </ul> </body> </html> Ошибка - Fatal error: Uncaught Error: Function name must be a string in адрес/index.php:6 Stack trace: #0 {main} thrown in адрес\index.php on line 6 В чём может быть проблема?
Не совсем понятно, где 6я строчка, но скорее всего проблема в том, что объект $pdo у Вас во всех функциях локальный. Либо добавьте везде global $pdo, либо передавайте его в качестве входного параметра.
Теперь- Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2019] Unknown character set in адрес\functions\connect.php:16 Stack trace: #0 адрес\functions\connect.php(16): PDO->__construct('mysql:host=;dbn...', NULL, NULL, Array) #1 адрес\functions\function.php(19): connectPDO() #2 адрес\index.php(6): getTags() #3 {main} thrown in адрес\functions\connect.php on line 16 Как я понял не может подключится к БД? Всё по уроку делал...
Это должно быть объявлено внутри функции connectPDO, либо global, либо в качестве входных параметров. Потому что везде пусто:
Вставил их в функцию connect PDO Новая ошибка - Fatal error: Uncaught Error: Call to a member function query() on null in адрес\functions\function.php:20 Stack trace: #0 адрес\index.php(6): getTags() #1 {main} thrown in адрес\functions\function.php on line 20 line 20 - PHP: $tagsResult = $pdo->query("SELECT * FROM `tags` ORDER BY `id`");
@MouseZver я в принципе по этой обвертке написал класс, но он слабоват по чужим кодам шастал смотрел и себе так же делал