mysql_fetch_assoc()期望参数1是资源json

时间:2013-11-24 19:08:30

标签: php sql database json

我正在做一个报告系统而且我有这个代码,我不知道为什么它会继续抛出这个错误

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);

我希望你能帮助我,谢谢你

2 个答案:

答案 0 :(得分:0)

您收到此错误是因为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";

答案 1 :(得分:0)

我冒昧地改变了一堆伤害眼睛的东西(为了我自己的清晰和清醒)。我重写了你的代码,以摆脱看起来最可能的罪魁祸首

  • 在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íasaadadiunalíneadeDesuracracónentu entorno de desarrollo para confirmar que tus sentencias son correctas。 Tambiéndeberíasinformartea traves de mysql_error() y mysql_errno() sihayalgúninrordurantelaejecucióndela sentencia sql。 Perdona que me haya tomado la libertad de reescribir grandes porciones detucódigo,lo hago para poder aclararme mejor