选择查询返回的印度语言为空结果

时间:2019-02-08 15:48:55

标签: php mysql

我有如下所示的mysql表

image

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作为主键。

1 个答案:

答案 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';

并尝试从此处进行调试。

编辑

请注意,字符集应为utf8utf8_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”值进行比较。

希望这会有所帮助。让我知道您遇到了什么问题。 :)