我在使用 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 并且没有任何改变。