我有这个.php文件(这里有很多回声,但这只是我的辩护):

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
try
{
$host="localhost:2222";
$username="karutakanji"; //replace with database username
$password="123456"; //replace with database password
$db_name="pairg_karutakanji_app"; //replace with database name

$con=mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_set_charset("utf8");
mysql_select_db("$db_name")or die("cannot select DB");

$nome_usuario = isset($_POST['nome_usuario']) ? $_POST['nome_usuario'] : '';
$categorias = isset($_POST['categorias']) ? $_POST['categorias'] : '';
$sql = "select count(kanji) as quantas_vezes_errou_o_kanji,kanji,nome_categoria from (select kanji,nome_categoria from (select kanji,id_categoria from (select id from (Select id_partidas_treinamento from partidas_treinamento inner join usuario on partidas_treinamento.id_usuario = usuario.id_usuario where nome_usuario='$nome_usuario') as tabelacomidspartidasdousuarioinformado inner join partidas_treinamento_kanjis on partidas_treinamento_kanjis.id_partidas_treinamento = tabelacomidspartidasdousuarioinformado.id_partidas_treinamento where se_acertou='não') as tabelaidskanjisusuarioerrou inner join jlptnew on jlptnew.id = tabelaidskanjisusuarioerrou.id) as kanjieidcategoriakanjiserrados inner join categorias where categorias.id_categoria = kanjieidcategoriakanjiserrados.id_categoria) as kanjisenomecategoriakanjiserrados ";

$array_categorias = explode("," , "$categorias");
$i = 0;
$len = count($array_categorias);

$array_categorias = array_filter($array_categorias);
if (!empty($array_categorias))
{
    $sql = $sql . "where (";
    while($i < $len)
    {
        $uma_categoria = $array_categorias[$i];
        $sql = $sql . "nome_categoria = '" . $uma_categoria . "'";
        if ($i !== $len - 1)
        {
                $sql = $sql . " or ";
        }
        $i = $i + 1;
    }
    $sql = $sql . ")";
}

$sql = $sql . " GROUP BY kanji ORDER BY quantas_vezes_errou_o_kanji DESC";
mysql_set_charset("utf8");
$result = mysql_query($sql);
if(!$result)
{
    echo mysql_error($con);
}


echo "/////////////////" . $sql . "///////////////////////////";
$json = array();

if(mysql_num_rows($result)){
    while($row=mysql_fetch_assoc($result)){
        $json[]=$row;
    }
}


mysql_close($con);
array_walk_recursive($json, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); });
    echo mb_decode_numericentity(json_encode($json), array (0x80, 0xffff, 0, 0xffff), 'UTF-8');

}
catch (Exception $e) {
 echo $e;
 echo 'Caught exception: ' .  $e->getMessage() . "\n";
}

?>


我根据我在php上产生的回声在日食上使用了一些调试功能。我这样做:

httpPost.setEntity(new UrlEncodedFormEntity(param));
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            String mensagemEntity1 = EntityUtils.toString(httpEntity);
            mensagemEntity1 = mensagemEntity1 + "";


eclipse adt的debbuger工具(我正在Android项目上使用.php文件)说我的sql是这样的:


  选择count(汉字)为
  来自(select的quantas_vezes_errou_o_kanji,日文汉字,nome_categoria
  汉字,nome_categoria来自(选择汉字,id_categoria来自(选择id
  从(从partidas_treinamento内部选择id_partidas_treinamento
  在partidas_treinamento.id_usuario = usuario.id_usuario上加入usuario
  其中nome_usuario ='fabioandrews')为
  tabelacomidspartidasdousuarioinformado内部联接
  partidas_treinamento_kanjis在
  partidas_treinamento_kanjis.id_partidas_treinamento =
  tabelacomidspartidasdousuarioinformado.id_partidas_treinamento其中
  se_acertou ='não')as tabelaidskanjisusuarioerrou内部连接jlptnew
  jlptnew.id = tabelaidskanjisusuarioerrou.id)为
  kanjieidcategoriakanjiserrados内部联接categorias其中
  categorias.id_categoria = kanjieidcategoriakanjiserrados.id_categoria)
  作为kanjisenomecategoriakanjiserrados其中(nome_categoria ='Saúde'
  或nome_categoria ='Educação'或nome_categoria ='Supermercado'或
  nome_categoria ='Tempo')GROUP BY汉字ORDER BY
  Quantas_vezes_errou_o_kanji DESC


当我在mysql工作台上执行此sql查询时,它工作正常,我收到了结果。但是,在.php上,来自它的$ result始终是一个空字符串,如下所示:'[]'

找不到消息错误,什么也没有。如果我的SQL查询正确,为什么我的结果为空字符串?

最佳答案

我会检查php文件的编码。

mysql_set_charset("utf8");行将编码设置为UTF-8。

查询真的是用UTF-8编写的吗?如果不是where子句:

nome_categoria = 'Saúde' or nome_categoria = 'Educação' or nome_categoria = 'Supermercado' or nome_categoria = 'Tempo'


将过滤所有结果,并且不返回任何行。

关于php - sql查询返回一个值,但是php上的$ result总是一个空数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26985198/

10-12 00:06
查看更多