选择查询返回空结果我的印第安语

问题描述 投票:0回答:1

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

php mysql
1个回答
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';

并试图从这里进行调试。

EDIT

请注意,字符集应该是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'

EDITED to answer your question:

它是正确的用法,而($行= 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的价值。

希望这可以帮助。让我知道你遇到了什么问题。 :)

© www.soinside.com 2019 - 2024. All rights reserved.