sql >> データベース >  >> RDS >> Mysql

Mysql、PDO-bindParamを使用して動作しないステートメントのように

    各パラメータを個別にバインドする必要があります。2番目のループでバインドできます。

    function retrieve_search_posts(PDO $pdo, $search_field) {
        /*
         * Get the PDO object as an argument, this function shouldn't care
         * how the PDO object is created, that's the factory's job.
         */
    
        /*
         * Use $underscored_names or $camelCase for variable names, easier on the eye
         */
    
        ## Variable initializations ##
        $where = array();
    
        ##Function start
        $words = preg_split("/\s+/", $search_field);
    
        for ($i = 0; $i < count($words); $i++) {
            /*
             * We don't need to have the word in here,
             * so we aren't even using the foreach loop, just a normal for
             */
            $where[] .= "`post_title` LIKE ?";
        }
        /*
         * For cleaner code, use an array and implode the pieces with OR,
         * this way, you don't get an OR at the beginning, nor the end.
         */
        $where_string = implode(" OR ", $where);
    
        $query = <<<MySQL
    SELECT  p.post_id, post_year, post_desc, post_title, post_date, img_file_name, p.cat_id
        FROM mjbox_posts p
        JOIN    mjbox_images i
        ON      i.post_id = p.post_id
            AND i.cat_id = p.cat_id
            AND i.img_is_thumb = 1
            AND post_active = 1
        WHERE ?
        ORDER BY post_date DESC
        LIMIT 9
    MySQL;
    
        $sth = $pdo->prepare($query);
    
        /*
        * Iterate over the array again,
        * this time, we're binding the values based on the index
        */
        foreach ($words as $index => $word) {
            $sth->bindValue($index+1, $word, PDO::PARAM_STR);
        }
    
        $sth->execute();
    
        $result = $sth->fetchAll(PDO::FETCH_ASSOC); //Fetch all the results in associative array form
    
        return $result;
    
    }
    

    加えられた変更については、コードのコメントを参照してください。



    1. php配列の表示とランダム化

    2. 文字エンコードの問題

    3. データベースサイズが2ギガバイトを超えると、SQLiteのパフォーマンスが低下しますか?

    4. MySQL LN()関数–数値の自然対数を返します