Что означает следующая ошибка? PHP, SQL

237
13 марта 2018, 03:40

При запросе возникает следующая ошибка:

SQLSTATE[HY000]: General error: mode must be an integer

Впервые столкнулся с ней

Код выглядит следующим образом:

<?
    require_once('includes/db.php');
    require_once('includes/requests.php');
    $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    try {
        $getArticle = $_GET['single'];
        $STHArticles = $DBH->query('SELECT * FROM articles WHERE article_categorie = ', $getArticle);
        $STHArticles->setFetchMode(PDO::FETCH_ASSOC);
        $rowArticles = $STHArticles->fetch();
        echo $rowArticles['title'];
    }
    catch(PDOException $e) {  
        echo "Ошибка...";  
        file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);  
    }
?>

В таблице мы имеем такие столбцы:

id
title
article_categorie
content

Адресная строка: /?single=1

Answer 1

Это значит, что $getArticle содержит тип string. Если вы точно уверены, что там будет тип int, том можете выполнить явное приведение типов:

$getArticle = (int) $_GET['single'];

Или используйте методPDOStatement::bindParam - он позволяет указать передаваемый тип данных:

$statement->bindParam('param1', $getArticle, PDO::PARAM_INT);
Answer 2

У вас ошибка в строке:

$STHArticles = $DBH->query('SELECT * FROM articles WHERE article_categorie = ', $getArticle);

Согласно документации для метода query, второй параметр должен быть int. Подробнее тут: http://php.net/manual/ru/pdo.query.php

Можно попробовать переделать код следующим образом:

<?
require_once('includes/db.php');
require_once('includes/requests.php');
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
try {
    $getArticle = $_GET['single'];
    // заменим этот метод на prepare
    //$STHArticles = $DBH->query('SELECT * FROM articles WHERE article_categorie = ', $getArticle);
    $STHArticles = $DBH->prepare('SELECT * FROM articles WHERE article_categorie = ?');
    $STHArticles->execute(array($getArticle));
    $STHArticles->setFetchMode(PDO::FETCH_ASSOC);
    $rowArticles = $STHArticles->fetch();
    echo $rowArticles['title'];
}
catch(PDOException $e) {  
    echo "Ошибка...";  
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);  
}
?>
READ ALSO
Группировка выборки MySql

Группировка выборки MySql

Если после выборки из базы у меня есть такой результат

193
Настройка подлючения к БД (Symfony)

Настройка подлючения к БД (Symfony)

При открытии сайта, появляется ошибка:

202
MYSQLI SELECT Fatal error

MYSQLI SELECT Fatal error

При попытке получить UUID выдает ошибку

144
Вывод дерева категорий

Вывод дерева категорий

Всем привет, вывожу дерево категорий в таком формате:

167