1

我在使用 utf8 编码对数据库运行查询时遇到了一些麻烦。一切正常,直到我尝试使用特殊字符的字符串。我无法对数据库进行大量更改,因为我正在向现有的 prestashop 模板添加一些单独的页面。

这是我的代码(抱歉,其中一些是罗马尼亚语)

$acces_server=mysql_connect($db_host, $db_user, $db_pass);
    if(!$acces_server) die ("Server-ul nu este disponibil momentan !");
    mysql_set_charset('utf8');
     echo mysql_client_encoding();

$acces_bd = mysql_select_db($db_name);
    if (!$acces_bd) die ("Ne pare rau, dar baza de date nu poate fi accesata momentan !");
mysql_query('SET NAMES utf8') or die(mysql_error());
mysql_query('SET CHARACTER SET utf8') or die(mysql_error());
mysql_query('SET COLLATION_CONNECTION="utf8_general_ci" ') or die(mysql_error());

如果我尝试进行这样的查询,我会得到 0 行:

$experienta= $_GET['name'];
$rez=mysql_query("SELECT nume_cutie FROM rez_experiente WHERE nume = '".$experienta."'"); 

我使用 echo 来显示查询,然后在 phpMyAdmin 中键入它并且它工作。头部也有这一行:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我真的不知道还能做什么,到目前为止我找到的所有解决方案似乎都不起作用。我什至尝试过使用mysqli,结果是一样的。请帮助我,并感谢您的时间。

*编辑我尝试使用 stmt->prepare 和 mysqli 并没有奏效。我也试过这样做:

$experienta2=str_replace("?","%",utf8_decode($experienta));
        $rez=mysql_query("SELECT nume_cutie FROM rez_experiente WHERE nume LIKE '".$experienta2."'"); 

威奇变成了这样:

SELECT nume_cutie FROM rez_experiente WHERE nume LIKE '5th Avenue Beauty Center  - Răsfăţ'

进入这个:

SELECT nume_cutie FROM rez_experiente WHERE nume LIKE '5th Avenue Beauty Center - R%sf%%'

查询再次在 phpMyAdmin 中工作,但 mysql_query() 没有返回任何内容,我切换到 utf8_unicode_ci 并且没有任何改变。

4

1 回答 1

0

数据库连接后,运行以下查询:

SET character_set_client=utf8;
SET character_set_connection=utf8;
SET character_set_database=utf8;
SET character_set_results=utf8;
SET character_set_server=utf8;
于 2012-09-21T15:38:11.817 回答