Как правильно экранировать кавычки и прочие символы, или как переделать запрос, чтобы не вы

Аватар пользователя engenes engenes 11 декабря 2019 в 12:07

Написал такой запрос

<?php
        $result 
db_query("
            SELECT DISTINCT node.title AS node_title, node.nid AS nid, url_alias.alias AS path, term_data.name AS term_name
            FROM {node} node
            LEFT JOIN url_alias ON CONCAT( 'node/', node.nid) = url_alias.source
            LEFT JOIN field_data_field_catalog AS field_catalog ON node.nid = field_catalog.entity_id
            LEFT JOIN taxonomy_term_data AS term_data ON field_catalog.field_catalog_tid = term_data.tid
            "
.$category_query."
            WHERE ((
                (node.status = '1') AND
                (node.type IN  ('product_display'))
                AND (node.title LIKE "
.$title."%)
            ))
            ORDER BY node.title DESC"
        
)->fetchAll();
?>

Вставляю переменную title напрямую в запрос.
Все работает но если в заголовке встречаются кавычки, то возникает синтаксическая ошибка.

пробовал делать отдельный массив с параметрами, но так и не получил нужно результата.

Комментарии

Аватар пользователя zvse zvse 12 декабря 2019 в 9:17
<?php
    $query 
db_select('node');
    
$query->join('url_alias''url_alias'"CONCAT('node/', node.nid) = url_alias.source");
    .....
    
$query->condition('node.status'1);
    
$query->condition('node.type', ['product_display']);
    
$query->condition('node.title''%' db_like($title) . '%''LIKE');
    
$query->orderBy('node.title''desc');
    
$queryResult $query->execute();
    
$result $queryResult->fetchAll();
?>

db_query устарел уже в д7, насколько я помню. Не используйте его. Он много чего не поддерживает.