1064 У вас есть ошибка в вашем синтаксисе SQL в Doctrine.Зачем? - PullRequest
0 голосов
/ 01 октября 2018

Я не понимаю, почему мой браузер возвращает эту ошибку и почему мой sql не работает.Я пытаюсь решить эту проблему, но я не знаю, как я могу это сделать.

private function getFromDb()
{
    $queryBuilder = $this->connection->createQueryBuilder();
    $query = $queryBuilder
        ->select('art1.articleID', 'art1.valueID')
        ->from('s_filter_articles', 'art1')
        ->innerJoin('art1', 's_filter_articles', 'art2', 'art1.articleID = art2.articleID')
        ->where('art1.valueID = 12499')
        ->andWhere('art2.valueID = 12500');

    return $query->execute()->fetchAll();
}

Этот код возвращает этот массив:

array:2 [▼
  0 => array:2 [▼
    "articleID" => "2225"
    "valueID" => "12499"
  ]
  1 => array:2 [▼
    "articleID" => "2250"
    "valueID" => "12499"
  ]
]

... и я хотел быудалить ВСЕ этот результат в MySQL.Поэтому я написал этот код:

public function removeFromDb()
{
    $result = $this->getFromDb();


    foreach ($result as $option) {

        $queryBuilder = $this->connection->createQueryBuilder();
        $query = $queryBuilder
            ->delete('s_filter_articles', 's')
            ->where('articleID = :articleID')
            ->andWhere('valueID = :valueID')
            ->setParameter(':articleID', $option['articleID'])
            ->setParameter(':valueID', $option['valueID']);

        return $query->execute();
    }
}

НО мой браузер возвращает эту ошибку:

> Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or
> access violation: 1064 You have an error in your SQL syntax; check the
> manual that corresponds to your MySQL server version for the right
> syntax to use near 's WHERE (articleID = '2225') AND (valueID =
> '12499')' at line 1 in
> /var/www/html/strefatenisa.local/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php
> on line 131

> Doctrine\DBAL\DBALException: An exception occurred while executing
> 'DELETE FROM s_filter_articles s WHERE (articleID = ?) AND (valueID =
> ?)' with params ["2225", "12499"]: SQLSTATE[42000]: Syntax error or
> access violation: 1064 You have an error in your SQL syntax; check the
> manual that corresponds to your MySQL server version for the right
> syntax to use near 's WHERE (articleID = '2225') AND (valueID =
> '12499')' at line 1 in
> /var/www/html/strefatenisa.local/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php
> on line 131

РЕДАКТИРОВАТЬ: Если я делаю обычный запрос в моем MySQL, все работает хорошо.

SELECT art1.articleID, art1.valueID 
        FROM s_filter_articles as art1
    INNER JOIN s_filter_articles as art2 ON  art1.articleID = art2.articleID
    WHERE art1.valueID = 12499
    AND art2.valueID = 12500

DELETE FROM `s_filter_articles` WHERE `articleID` = 2225 AND `valueID` = 12499

1 Ответ

0 голосов
/ 01 октября 2018

Обновите вашу функцию removeFromDb () следующим кодом:

public function removeFromDb()
{
    $result = $this->getFromDb();

    foreach($result as $option){
        $queryBuilder = $this->connection->createQueryBuilder();
        $queryBuilder->delete('s_filter_articles', 's')
                     ->where('articleID = :articleID')
                     ->andWhere('valueID = :valueID')
                     ->setParameter(':articleID', $option['articleID'])
                     ->setParameter(':valueID', $option['valueID']);

        $query = $queryBuilder->getQuery();
        $query->execute();
    }
}

Функция createQueryBuilder возвращает новый экземпляр класса QueryBuilder, который не имеет никакого объявления метода execute ().Вот почему я добавил метод getQuery (), чтобы вернуть класс Query, который имеет метод execute ().Еще одна вещь, которую я удалил, это возврат изнутри foreach.Я надеюсь, что эта работа для вас, если не, дайте мне знать, и я могу помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...