@Vinchester312312

Не работает fetch. Что делать?

$pdo = new PDO("mysql:host=sql8.freemysqlhosting.net;dbname=*****;charset=utf8;","*******,"*********");
            $output = "Database connected";
            // $headline = htmlspecialchars($_POST["headline"]);
            // // $command = htmlspecialchars($_POST['command']);  
            // $posttext = htmlspecialchars($_POST['posttext']);
            // $imgurl = htmlspecialchars($_POST['imgurl'])
            $sql = "select `id`,`headline" . $lang . "`,`posttext" . $lang . "`,`img`,`author` from `posts` where `posttext" . $lang . "` is not null";
            $result = $pdo->query($sql);
            // console.log($result);
            while($row = $result->fetch(PDO::FETCH_ASSOC)){
                $idarray[] = $row['id'];
                $headlineEnarray[] = $row['headline' . $lang . ''];
                $posttextEn[] = $row['posttext' . $lang . ''];
                $imgurlarray[] = $row['img'];
                $authorarray[] = $row['author'];
            }

Всё нормально работает в Opera, Edge, но выдаёт ошибку "Fatal error: Uncaught Error: Call to a member function fetch() on bool" во всех остальных браузерах. Как исправить это?
  • Вопрос задан
  • 147 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Читаем доку:
PDO::query
Возвращаемые значения
Возвращает объект PDOStatement или false в случае возникновения ошибки.


Читаем ошибку:
Fatal error: Uncaught Error: Call to a member function fetch() on bool

Делаем выводы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@402d
начинал с бейсика на УКНЦ в 1988
SQL injection ? Не не слышал !
Это про то как у Вас собирается запрос.
Описываете Вы какое то чудо.
Скрипт на сервере ломается из-за юзер агента у клиента.

Внимательно разбирайтесь откуда у Вас берется $lang.
Еще раз про инъекции. Нельзя верить ничему !!! POST,GET,COOKIE, _SERVER и прочее !
Ответ написан
Fockker
@Fockker Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Вам всё правильно пишут про инъекцию.
И эта дурацкая проблема с запросом - её прямое следствие.
Очевидно же, что "опера" по какой-то причине не возвращает куку с языком. И вам самому надо разбираться с этим вопросом.

А запрос исправляется просто - ровно тем способом, о котором вам и писали. Проверкой любых данных, поступающих в запрос. Которая в первую очередь защитит от инъекций, а так же и от этой дурацкой ошибки.
$languages = ['en', 'hu', 'fu', 'ck'];
$lang = $_COOKIE['lang'] ?? '';
$lang = in_array($lang, $languages) ? $lang : 'en'

Так $lang всегда будет иметь корректное значение.

Хотя по уму конечно надо было делать не колонки для каждого языка, а строки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы