我有mysql表如下图所示
https://photos.app.goo.gl/MWuakdf1daibihEHA
当我使用
SELECT *
FROM dict
WHERE malayalam_definition = '$_value'
它返回一个空行,但如果我使用
SELECT *
FROM dict
WHERE english_word = '$_value'
我得到的值。
我用SET NAMES utf8
仍然没有运气。
我用utf8mb4字符集和校对utf8mb4_general_ci
编辑:首先,我创建的数据库与utf8mb4_general_ci
整理和创建的表有相同的排序规则。然后我用导入CSV文件
load data local infile '/mnt/c/Users/justi/Desktop/enml/enml.csv'
into table dict
CHARACTER SET utf8mb4
fields terminated by '\t'
IGNORE 1 ROWS;
PHP文件
<?php
$dbhost = "localhost";
$dbuser = "newuser";
$dbpass = "password";
$dbname = "dict3";
//Connect to MySQL Server
$c = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
$quer = "SET NAMES utf8mb4";
mysqli_query($c, $quer);
$wpm = $_GET['wpm'];
$query="SELECT * FROM dict WHERE malayalam_definition = '$wpm'";
$qry_result = mysqli_query($c, $query) or die(mysqli_error($c));
if(mysqli_affected_rows($c)>0) {
echo "done";
} else {
echo "no";
}
while($row = mysqli_fetch_array($qry_result)) {
echo $row['english_word']."<br />";
echo $row['part_of_speech']."<br />";
echo $row['malayalam_definition']."<br />";
}
?>
+--------+----------------+----------------+---------------------------------+
| # id | english_word | part_of_speech | malayalam_definition |
+--------+----------------+----------------+---------------------------------+
| 174569 | .net | n | പുത്തന് കമ്പ്യൂട്ടര് സാങ്കേതികത ഭാഷ |
+--------+----------------+----------------+---------------------------------+
| 116102 | A bad patch | n | കുഴപ്പം പിടിച്ച സമയം |
+--------+----------------+----------------+---------------------------------+
| 219752 | a bag of bones | phr | വളരെയതികം മെലിഞ്ഞ വ്യക്തി അഥവാ മൃഗം |
+--------+----------------+----------------+---------------------------------+
我使用id作为主键。
什么是的$_value
你想在这个代码块中找到价值?
SELECT *
FROM dict
WHERE malayalam_definition = '$_value'
如果该值不在malayalam_definition
列匹配任何值,那么将有真的没有结果。
通过检查,如果在malayalam_definition
列中的值可以真的查询读取刚刚从malayalam_definition
列中选择所有的值尝试调试:
SELECT malayamam_definition from dict;
如果返回值,尝试一个值从它复制并分配给您的$_value
并尝试再次查询第一个查询
/*replace $copiedValueFromTheReturnedValues with your copied value from the ```malayalam_definition``` column's returned values */
$_value = $copiedValueFromTheReturnedValues;
SELECT * from dict WHERE malayalam_definition = '$_value';
并试图从这里进行调试。
请注意,字符集应该是utf8
和utf8_unicode_ci
整理。
我觉得你的while循环也应该被配置。添加MYSQLI_ASSOC
参数您mysqli_fetch_array()
内通过表的列名得到一个关联数组行和索引它们:
while($row = mysqli_fetch_array($qry_result, MYSQLI_ASOC)) {
echo $row['english_word']."<br />";
echo $row['part_of_speech']."<br />";
echo $row['malayalam_definition']."<br />";
}
编辑的字符集,整理和while循环后,你的这个查询应该现在的工作。 :)
SELECT *
FROM dict
WHERE malayalam_definition = '$_value'
它是正确的用法,而($行= mysqli_fetch_array($ qry_result)){如果(in_array($ WPM,$行)){回声 “发现”;打破; }其他{回声“未找到”;打破; }}
要纠正代码,应该是:
while($row = mysqli_fetch_array($qry_result, MYSQLI_ASSOC)) {
if($wpm === $row['malayalam_definition']) {
echo "found";
break;
} else {
echo "Not found";
break;
}
}
我所做的是我加MYSQLI_ASSOC
作为参数为您mysqli_fetch_array()。我也取代您的线路if(in_array($wpm, $row))
到if($wpm === $row['malayalam_definition'])
因为你迭代直通每一行。 $ WPM应该是比较各行的“malayalam_definition的价值。
希望这可以帮助。让我知道你遇到了什么问题。 :)