Вопрос по символу ":" в SQL запросе -- что такое двоеточие

Добрый день. Разбираясь с уроком, столкнулся с тем, что в коде cms http://my-first-cms.loc/ в файле

Article.php

в строке 149 есть запись:

$categoryClause = $categoryId ? "WHERE categoryId = :categoryId" : "";

Мне непонятен символ " : " в выражении:

"WHERE categoryId = :categoryId"

Что он означает?

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

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

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

Добавьте пожалуйста цитату из кода, чтобы 10 строк до этого и 10 после, чтобы был понятен контекст.

_____________
матфак вгу и остальная классика =)

public static function getList($numRows=1000000, 
            $categoryId=null, $order="publicationDate DESC") 
    {
        $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
        $categoryClause = $categoryId ? "WHERE categoryId = :categoryId" : "";
        $sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) 
                AS publicationDate
                FROM articles $categoryClause
                ORDER BY  $order  LIMIT :numRows";
        
        $st = $conn->prepare($sql);
//                        echo "<pre>";
//                        print_r($st);
//                        echo "</pre>";
//                        Здесь $st - текст предполагаемого SQL-запроса, причём переменные не отображаются
        $st->bindValue(":numRows", $numRows, PDO::PARAM_INT);
        
        if ($categoryId) 
            $st->bindValue( ":categoryId", $categoryId, PDO::PARAM_INT);
        
        $st->execute(); // выполняем запрос к базе данных
//                        echo "<pre>";
//                        print_r($st);
//                        echo "</pre>";
//                        Здесь $st - текст предполагаемого SQL-запроса, причём переменные не отображаются
        $list = array();

        while ($row = $st->fetch()) {
            $article = new Article($row);
            $list[] = $article;
        }
vedro-compota's picture

собственно, ответ на вопрос вот в этой строке (где подставляется значение):

$st->bindValue( ":categoryId", $categoryId, PDO::PARAM_INT);

:categoryId -- это плейсхолдер, для настоящего значения, которое и подставляется.

_____________
матфак вгу и остальная классика =)

sid's picture

Возможно это тоже поможет, ссылка на документацию по подготовленным запросам.