I am having a problem retrieving a data from mysql that has an apostrophe in it. I don't have problem in saving a data that has an apostrophe since that I am using mysqli_real_escape_string
when inserting the data to the database but I get an error when retrieving it. My sample code in PHP for retrieving the data is mysqli_query($con,"SELECT column1data FROM Table1 WHERE column2data LIKE '".$data."' ")or die(mysqli_error($con));
and the $data
is the one that has an apostrophe in it.
Asked
Active
Viewed 2,010 times
0

Cœur
- 37,241
- 25
- 195
- 267

Mark Vincent Manjac
- 507
- 1
- 6
- 27
-
Use parameters. It will make your life so much easier. Or escape the string as in insert. But rather parameters. – Sami Kuhmonen Oct 08 '15 at 06:14
-
1See http://stackoverflow.com/questions/9596652/how-to-escape-apostrophe-in-mysql and http://stackoverflow.com/questions/4659879/mysql-php-with-special-characters-like-apostrophe-and-quotation-mark and http://stackoverflow.com/questions/8651170/apostrophe-during-insert-mysql – Thomas Oct 08 '15 at 06:15
2 Answers
4
Still use mysqli_real_escape_string()
when binding variables, especially when it is a string, to your query. Not just for inserting data.
$data = mysqli_real_escape_string($data);
You should also look at prepared statement. No need to sanitize the variable before binding it your query, prepared statement will do it for you.
$data = "%{$data}%"; /* CHANGE THIS IF YOU DON'T WANT TO USE % */
$stmt = $con->prepare("SELECT column1data FROM Table1 WHERE column2data LIKE ?")){ /* PREPARE YOUR STATEMENT */
$stmt->bind_param("s", $data); /* BIND THE DATA */
$stmt->execute(); /* EXECUTE THE QUERY */
$stmt->bind_result($column1data); /* BIND THE RESULT TO THIS VARIABLE */
$stmt->fetch(); /* FETCH THE RESULT */
echo $column1data; /* ECHO THE RESULT */
$stmt->close(); /* CLOSE THE STATEMENT */
}

Logan Wayne
- 6,001
- 16
- 31
- 49
1
You should use mysqli_real_escape_string()
every time that a string is being placed into your SQL code. Use mysqli_real_escape_string($data)
rather than just $data
.

Nerdwood
- 3,947
- 1
- 21
- 20