我有如下所示的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
归类创建数据库,并使用相同的归类创建表。然后我用
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作为主键。
答案 0 :(得分:0)
您试图在此代码块中找到的$_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'
它是否正确使用while($ row = mysqli_fetch_array($ qry_result)){if(in_array($ wpm,$ row)){echo“ found”;打破; } else {echo“未找到”;打破; }
要更正代码,应为:
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”值进行比较。
希望这会有所帮助。让我知道您遇到了什么问题。 :)