使用查询字符串时,不会返回URI段

I'm trying to paginate the search results returned by the query. I have the following URL:

blog/search?query=post/5

Where I am trying to get the value of $start=5 from the URL using:

$start = $this->uri->segment(3);

It is not returning anything.

Where removing ?query=post, i.e, blog/search/5 works fine. But I want to keep the query parameter and read the value.

That's because of the ? character in the URI. CodeIgniter URI parser (and any other standard URI parser) does not recognize what you have in mind. After the ? character, it's all query string, not URI segments. See the output of PHP's parse_url():

parse_url('blog/search?query=post/5')
[
    "path" => "blog/search",
    "query" => "query=post/5",
]

See? The first segment is blog, the second is search and the rest is the querystring.

You need to change your URI design in an standard way. For example:

blog/search/5?query=post

So that the call to $this->uri->segment(3) will return what you have in mind.

Speaking of CodeIgniter pagination library, see reuse_query_string and page_query_string configs in the documentation.