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
x
$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);