I am setting up a new API, I am wanting to display selected info from a Mysql database with a ‘SELECT columns WHERE column LIKE % ?’, but I’am getting error in ‘%’ symbol, where I must insert ‘%’ this symbol ?
This is my query in folder models
$query = 'SELECT 
                q.id, 
                q.id_user, 
                q.id_tag,
                q.image,
                q.title,
                q.description,
                q.like,
                q.dislike,
                q.date,
                q.status
               FROM
                '.$this->table.' as q
            WHERE
                q.title LIKE ?';
This is how i execute that
$stmt = $this->conn->prepare($query); $stmt->bindParam(1, $this->like); $stmt->execute();
And this is how I request it
$question->title = isset($_GET['title']) ? $_GET['title'] : die();
Advertisement
Answer
When using a LIKE clause with a parameterised query in a prepared statement, simply put the wildcard symbol in the param you are appending.
For example, if your query was:
SELECT * FROM table WHERE column LIKE ?;
In PHP, you would define the parameter in this way:
$stmt->bindParam(1, '%' . $this->like . '%');
Of course, you can have the ‘%’ at only the start, or only the end, or both, depending on how you want the wildcard to work:
$stmt->bindParam(1, '%' . $this->like . '%'); $stmt->bindParam(1, '%' . $this->like); $stmt->bindParam(1, $this->like . '%');
As an aside, you can also put it into the variable:
$p = '%' . $this->like . '%'; $stmt->bindParam(1, $p);