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

Php 替换单引号以正确搜索数据库的最佳方法?,php,sql,database,web-applications,validation,Php,Sql,Database,Web Applications,Validation,我正在开发一个应用程序,在这个应用程序中,用户可以通过多个不同的条件进行搜索。可用条件之一是按名称搜索。名称存储在数据库中,并去除HTML字符,例如a'存储为&39;。这样做的问题是,如果用户输入常规英文名称按名称搜索,它会在数据库中查找英文名称,而不是HTML剥离名称。我尝试过使用htmlspecialchars$string,ENT_引号,但由于某些原因,它并不总是正确地替换单个引号。有人能想到为什么会发生这种情况,或者推荐一种更好的方法吗?谢谢大家! 尝试使用此html\u entity\

我正在开发一个应用程序,在这个应用程序中,用户可以通过多个不同的条件进行搜索。可用条件之一是按名称搜索。名称存储在数据库中,并去除HTML字符,例如a'存储为&39;。这样做的问题是,如果用户输入常规英文名称按名称搜索,它会在数据库中查找英文名称,而不是HTML剥离名称。我尝试过使用htmlspecialchars$string,ENT_引号,但由于某些原因,它并不总是正确地替换单个引号。有人能想到为什么会发生这种情况,或者推荐一种更好的方法吗?谢谢大家!

尝试使用此html\u entity\u decode$string而不是htmlspecialchars$string,ENT\u引号

尝试使用此html\u entity\u decode$string而不是htmlspecialchars$string,ENT\u引号

您不需要替换单引号。您所需要做的就是使用或MySQLi扩展。PDO的例子

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

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

这样,即使值有单引号,也可以进行搜索。

您不需要替换单引号。您所需要做的就是使用或MySQLi扩展。PDO的例子

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

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

这样,即使值只有一个引号,它也允许您进行搜索。

两个ans都很好,但您也可以尝试一下

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

希望这会有所帮助

两个ans都很好,但你也可以试试这个

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

希望对您的查询有所帮助,请将您的“报价”替换为。第一个引号将签署此引号后的字符将按原样使用

下面是示例代码:

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>

在您的查询中,将您的“报价”替换为。第一个引号将签署此引号后的字符将按原样使用

下面是示例代码:

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>

应使用数据库供应商特定的转义函数转义引号。ENT_Quotes是一个常量,不需要$prefix。也就是说,看看执行'->&39;转换并在代码中重用相同的逻辑。希望这种转变过去、现在和将来都是一致的。我仍然无法让它起作用。htmlentities_decode$string甚至无法解码&39;回到单撇号。字符编码可能会以任何方式影响这一点吗?应使用数据库供应商特定的转义函数转义引号。ENT_Quotes是一个常量,不需要$prefix。也就是说,看看执行'->&39;转换并在代码中重用相同的逻辑。希望这种转变过去、现在和将来都是一致的。我仍然无法让它起作用。htmlentities_decode$string甚至无法解码&39;回到单撇号。字符编码会以任何方式影响这一点吗?@user1631077@user1631077