我有一个名为“status”的表,用于存储对象状态。该表有5列,除了“symbol”列,它的类型是VARCHAR utf8mb4_unicode_ci,所有其他列只是典型的整数。
问题是因为符号列可以存储英文和非英文字符,它返回NULL(带var_dump($row)
)当我使用我的php文件“getStatus.php”从行中检索数据时非英语符号,但是当我使用英文字符作为符号时它很有效。
这是我的桌子(第二行的符号是“تست”):
这是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中工作?
答案 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