PHP中的上标字符,导致MySQLi select查询查找0行

PHP中的上标字符,导致MySQLi select查询查找0行,php,mysql,character-encoding,mysqli,superscript,Php,Mysql,Character Encoding,Mysqli,Superscript,我使用的是PHP5.3.3和MySQL 5.1.61。该列使用UTF-8编码,PHP文件使用UTF-8编码,没有BOM 在Windows上的SQLYG中使用²字符执行MySQLi查询时,查询将正确执行,并显示正确的搜索结果 如果我在PHP中执行相同的查询,它将执行,但将显示0个受影响的行 以下是我尝试过的: 同时使用LIKE而不是= 将PHP文件的编码更改为ANSI、不带BOM的UTF-8和UTF-8 在运行查询之前执行“设置名称utf-8”和“latin1” Did标题('Content-T

我使用的是PHP5.3.3和MySQL 5.1.61。该列使用UTF-8编码,PHP文件使用UTF-8编码,没有BOM

在Windows上的SQLYG中使用²字符执行MySQLi查询时,查询将正确执行,并显示正确的搜索结果

如果我在PHP中执行相同的查询,它将执行,但将显示0个受影响的行

以下是我尝试过的:

  • 同时使用LIKE而不是=
  • 将PHP文件的编码更改为ANSI、不带BOM的UTF-8和UTF-8
  • 在运行查询之前执行“设置名称utf-8”和“latin1”
  • Did标题('Content-Type:text/html;charset=UTF-8');在PHP中
  • 使用MySQLi::real\u escape\u字符串进行转义
  • 执行筛选变量($String,filter\u SANITIZE\u String)
  • 尝试了MySQLi stmt绑定
我能让它正常工作的唯一方法是将²替换为%,并在PHP中将=更改为LIKE


当使用²时,如何在PHP中正确地进行it查询?

您应该能够通过确保以下各项使查询正常工作:

为UTF-8准备PHP 首先需要确保将发出这些查询的PHP页面作为UTF-8编码的页面。这将确保正确显示来自数据库的任何UTF-8输出。在Firefox中,您可以通过访问感兴趣的页面并使用查看页面信息菜单项来检查是否存在这种情况。这样做时,您应该看到UTF-8作为页面编码的值。如果页面没有作为UTF-8使用,您可以通过以下两种方式之一使用。您可以在调用
header()
时设置编码,如下所示:

header('Content-Type: text/html; charset=UTF-8');
(CREATE | ALTER) DATABASE ... DEFAULT CHARACTER SET utf8;
ALTER TABLE ... CONVERT TO CHARACTER SET utf8;
或者,您可以在页面的
标题
块中使用
meta
标记:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
可以使用以下命令更改数据库级编码:

header('Content-Type: text/html; charset=UTF-8');
(CREATE | ALTER) DATABASE ... DEFAULT CHARACTER SET utf8;
ALTER TABLE ... CONVERT TO CHARACTER SET utf8;
要查看表使用的字符编码,只需执行以下操作:

SHOW CREATE TABLE myTable;
类似地,下面介绍如何更改表级编码:

(CREATE | ALTER) TABLE ... DEFAULT CHARACTER SET utf8;
我建议在层次结构中将编码设置为尽可能高。这样,您就不必记得为新表手动设置它。现在,如果表的字符编码尚未设置为UTF-8,则可以尝试使用
alter
语句对其进行转换,如下所示:

header('Content-Type: text/html; charset=UTF-8');
(CREATE | ALTER) DATABASE ... DEFAULT CHARACTER SET utf8;
ALTER TABLE ... CONVERT TO CHARACTER SET utf8;
使用此语句时要非常小心如果表中已有UTF-8值,则在尝试转换时这些值可能会损坏。然而,也存在一些问题

强制MySQLi使用UTF-8 最后,在连接到数据库之前,请确保发出适当的调用,说明您正在使用UTF-8编码。以下是方法:

$db = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);

// Change the character set to UTF-8 (have to do it early)
if(! $db->set_charset("utf8"))
{
    printf("Error loading character set utf8: %sn", $db->error);
}
一旦你做到了这一点,一切都应该如预期的那样顺利。您只需要担心编码的字符是HTML的大5:
、“、”和&
。您可以使用函数处理这些字符


如果您想阅读更多内容(并获得指向其他资源的链接),请随时查看我写的有关此过程的文章。共有两部分:,和。祝您好运!

您是否尝试过变量绑定(
mysqli_stmt::bind_param
)是的。刚刚更新了我的帖子。我在发布后试过了;谢谢你指出:)。几个问题:(A)你的表是否使用UTF-8字符集(你可以通过执行
show create table{tablename}
命令来判断)?(b)在发出查询之前,你是否使用MySQLi的
set\u字符集(“utf8”)
功能(更多信息,请参阅)?很可能数据库中的字符编码与PHP源文件中的编码不同。因此,您最终查询的字符串采用不同的编码(基本上是不同的字符串),这当然不存在于数据库中(或者如果存在,则结果记录将与您想要和期望的结果记录不同).这里的这段代码就是修复它的方法:).$Connection->set\u charset(“utf8”)。谢谢!