MySQLi:非英文字符

时间:2015-12-29 15:12:33

标签: php mysql mysqli

我有一个名为“status”的表,用于存储对象状态。该表有5列,除了“symbol”列,它的类型是VARCHAR utf8mb4_unicode_ci,所有其他列只是典型的整数。

问题是因为符号列可以存储英文和非英文字符,它返回NULL(带var_dump($row))当我使用我的php文件“getStatus.php”从行中检索数据时非英语符号,但是当我使用英文字符作为符号时它很有效。

这是我的桌子(第二行的符号是“تست”):

my table

这是php代码,“getStatus.php”:

if(!isset($_GET["symbol"]))
        die("please specify the symbol");
$con = mysqli_connect("localhost","root","******","****");
// Check connection
if (!$con) {
    die("Connection failed: " . mysqli_connect_error());
}
$query = "SELECT * FROM `status` WHERE `symbol` =  '" . $_GET["symbol"] . "';";
$result = mysqli_query($con,$query);
if (!$result)
        die("unable to retreive status");
$row = mysqli_fetch_assoc($result);
if ($row["status"] == 1)
        echo $row["percentage"];
else
        echo -1;

我可以成功获取数据当我执行使用

调用mysql的getStatus.php?symbol=EU
SELECT * FROM `status` WHERE `symbol` = 'ER';

但是当我执行getStatus.php?symbol=تست时,我得到了空!令人困惑的一点是,如果我复制查询并在mysql命令行中输入它会工作但是当我在php中用mysqli发送相同的查询时它不起作用!!

SELECT * FROM `status` WHERE `symbol` = 'تست';

为什么它在mysql命令行和phpmyadmin中工作,而不是在mysqli中工作?

1 个答案:

答案 0 :(得分:0)

使用html_entity_decode():

在$ _GET [“symbol”]值上使用html_entity_decode()

而不是

$query = "SELECT * FROM `status` WHERE `symbol` =  '" . $_GET["symbol"] . "';";

运行

$query = "SELECT * FROM status WHERE symbol = 'html_entity_decode([$_GET["symbol"])'";

此解决方案有效here