替换单引号以正确搜索数据库的最佳方法?

时间:2012-09-21 16:37:28

标签: php sql database web-applications validation

我正在开发一个应用程序,用户可以通过多种不同的标准搜索用户。其中一个可用标准是按名称搜索。名称存储在数据库中,其中HTML字符被剥离,例如。 a'存储为'。这样做的问题是,如果用户按名称输入常规英文名称,则会查找英文名称而不是数据库中的HTML剥离名称。我尝试过使用htmlspecialchars ($string, ENT_QUOTES),但由于某种原因,它并不总是正确地替换单引号。谁能想到为什么会发生这种情况,或者推荐更好的方法?谢谢!

4 个答案:

答案 0 :(得分:3)

您无需替换单引号。您需要做的就是使用 PDO MySQLi扩展程序。 PDO的例子,

$stmt = $pdo->prepare('SELECT * FROM tableName WHERE name = :name');

$stmt->execute(array(':name' => $name));
foreach ($stmt as $row) 
{
    // do something with $row
}

通过这种方式,它允许您搜索即使值具有单引号。

答案 1 :(得分:1)

尝试使用此html_entity_decode($string)代替htmlspecialchars($string, ENT_QUOTES);

答案 2 :(得分:0)

两者都很好,但你也可以尝试这个...

 function change_text($in, $out, $text){

$input = array($in);
$change = array($out) ;
$result = @str_replace ($input ,$change, $text);
return $result;
}

$change_text = change_text("'", '',$text);
希望它会有所帮助

答案 3 :(得分:0)

在您的查询中,将'(引用)替换为''。第一次引用将在此引用后按原样使用该字符。

以下示例代码:

mysql> select * from activities where activity='aku''kamu';
+----+----------+---------+
| id | activity | user_id |
+----+----------+---------+
|  1 | aku'kamu |       3 |
+----+----------+---------+
1 row in set (0.00 sec)

mysql> update activities set activity='aku''kamu' where id=2
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from activities where activity='aku''kamu';
+----+----------+---------+
| id | activity | user_id |
+----+----------+---------+
|  1 | aku'kamu |       3 |
|  2 | aku'kamu |       3 |
+----+----------+---------+
2 rows in set (0.00 sec)

mysql>