【问题标题】:mysql_fetch_assoc() expects parameter 1 to be resource json [duplicate]mysql_fetch_assoc() 期望参数 1 是资源 json [重复]
【发布时间】:2013-11-24 19:08:30
【问题描述】:

我正在做一个报告系统,我有这个代码,我不知道为什么它总是抛出那个错误

header('Access-Control-Allow-Origin: *');
    $conn=mysql_connect($hostname,$username,$password);
    mysql_select_db($database);
    $where = "where 1=1 ";
    if($_GET["desarrollo"] != 0)
        $where .= " and satisfaccion_cliente.clave_desarrollo = ".mysql_real_escape_string($_GET["desarrollo"])." ";
    if($_GET["del"] != "" && $_GET["al"] != "")
        $where .= " and fecha_creacion between '".mysql_real_escape_string($_GET["del"])."' and '".mysql_real_escape_string($_GET["al"])."' ";
    $sql = "SELECT COUNT (id_encuesta) as total, primer_apellido, segundo_apellido, nombres";
    $sql .= "FROM satisfaccion_cliente";
    $sql .= "INNER JOIN usuarios ON satisfaccion_cliente.clave_usuario = usuarios.clave_usuario";
    $sql .= "INNER JOIN personas ON usuarios.id_persona = personas.id_persona";
    $sql .= "INNER JOIN desarrollos ON desarrollos.clave_desarrollo = satisfaccion_cliente.clave_desarrollo";
    $sql .= $where;
    $sql .= "GROUP BY satisfaccion_cliente.clave_usuario";
    $data = array();
    $data["total"] = 0;
    $data["data"] = array();
    $resultado = mysql_query($sql);
    while ($fila = mysql_fetch_assoc($resultado)) {
        $data["total"] += $fila["total"];
        $temp["nombre"] = utf8_encode($fila["nombres"]." ".$fila["primer_apellido"]." ".$fila["segundo_apellido"]);
        $temp["total"] = $fila["total"];
        $temp["color"] = $color[rand(0, 24)];
        array_push($data["data"],$temp);
    }
    mysql_free_result($resultado);
    mysql_close($conn);
    echo json_encode($data);

希望你能帮帮我,谢谢

【问题讨论】:

    标签: php sql database json


    【解决方案1】:

    您收到此错误是因为 mysql_query 返回 false。您的 SQL 语句中有错误。使用 mysql_error 找出问题所在。

    $resultado = mysql_query($sql);
    if(!$resultado) echo mysql_error();
    while ($fila = mysql_fetch_assoc($resultado)) {
    

    连接时缺少空格。添加空格,也许你的查询会运行没有错误

    $sql = "SELECT COUNT (id_encuesta) as total, primer_apellido, segundo_apellido, nombres ";
    $sql .= "FROM satisfaccion_cliente ";
    $sql .= "INNER JOIN usuarios ON satisfaccion_cliente.clave_usuario = usuarios.clave_usuario ";
    $sql .= "INNER JOIN personas ON usuarios.id_persona = personas.id_persona ";
    $sql .= "INNER JOIN desarrollos ON desarrollos.clave_desarrollo = satisfaccion_cliente.clave_desarrollo ";
    $sql .= $where;
    $sql .= "GROUP BY satisfaccion_cliente.clave_usuario";
    

    【讨论】:

    • 谢谢,问题出在空格上
    【解决方案2】:

    我冒昧地更改了一堆只会伤害眼睛的东西(为了我自己的清晰度和缘故)。我重写了你的代码以摆脱最可能的罪魁祸首

    • sql 关键字之间缺少空格
    • 普遍缺乏清晰度(我自己的偏见和强迫症在工作中)

    更正和重组的代码:

    header('Access-Control-Allow-Origin: *');
    $conn = mysql_connect($hostname,$username,$password);
    mysql_select_db($database);
    $where = array();
    if($_GET['desarrollo'] !== '0') {
      $where[] = 's.clave_desarrollo="'.mysql_real_escape_string($_GET["desarrollo"]).'"';
    }
    if($_GET['del'] !== '' && $_GET['al'] !== '') {
      $where[] = sprintf('u.fecha_creacion BETWEEN "%s" AND "%s"',
                 mysql_real_escape_string($_GET['del']),
                 mysql_real_escape_string($_GET['al']));
    }
    $sql = 'SELECT COUNT (id_encuesta) as total, primer_apellido, segundo_apellido, nombres';
    $sql .= ' FROM satisfaccion_cliente AS s';
    $sql .= ' INNER JOIN usuarios    AS u ON s.clave_usuario    = u.clave_usuario';
    $sql .= ' INNER JOIN personas    AS p ON u.id_persona       = p.id_persona';
    $sql .= ' INNER JOIN desarrollos AS d ON d.clave_desarrollo = s.clave_desarrollo';
    $sql .= $where ? ' WHERE '.implode(' AND ',$where) : '';
    $sql .= ' GROUP BY s.clave_usuario';
    $data = array();
    $data['total'] = 0;
    $data['data'] = array();
    //if ($debug) echo __FILE__.' query: '.$sql.PHP_EOL;
    $resultado = mysql_query($sql);
    while ($fila = mysql_fetch_assoc($resultado)) {
      $data['total'] += $fila['total'];
      $temp['nombre'] = utf8_encode($fila['nombres'].' '.$fila['primer_apellido'].' '.$fila['segundo_apellido']);
      $temp['total'] = $fila['total'];
      //$color is currently undefined
      $temp["color"] = $color[rand(0, 24)];
      $data['data'][] = $temp;
    }
    mysql_free_result($resultado);
    mysql_close($conn);
    echo json_encode($data);
    

    这显然是西班牙语,所以以防万一,我会为你说得很清楚

    En tu sentencia sql hace falta muchos espacios, deberías añadir una depuración en tu entorno de desarrollo para confirmar que tus sentencias son correctas。 También deberías informarte a traves de mysql_error() y mysql_errno() si hay algún error durante la ejecución de la sentencia sql。 Perdona que me haya tomado la libertad de reescribir grandes porciones de tu código, lo hago para poder aclararme mejor

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 2015-02-09
      • 2023-03-23
      相关资源
      最近更新 更多