使用php,json和MySQL

时间:2017-06-27 23:56:35

标签: php mysql json

使用以下功能,我从数据库中获取数据:

public function cargarPaises(){
    $modelo = new Conexion();
    $conexion = $modelo->get_conexion();
    $sql = "select idPais, nombre from paises";
    $statement = $conexion->prepare($sql);
    $statement->execute();          
    return $statement;
}

然后在这个其他文件中我调用函数" cargarPaises":

<?php

    require_once('../Modelo/class.conexion.php');
    require_once('../Modelo/class.consultas.php');

    $consultas = new Consultas();
    $datos = $consultas->cargarPaises();

    if (count($datos) > 0) {        
        while ($result = $datos->fetch(PDO::FETCH_ASSOC)) {
            //printf ("%s (%s)\n", $result["idPais"], $result["nombre"]);echo"<br>";
            //return $result;
            //$nombre=$result['nombre'];
            //$idPais=$result['idPais'];            
            //echo "<option value=".$idPais.">".$nombre."</option>\n";
            //echo json_encode($result,JSON_HEX_QUOT | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS);        
            echo json_encode($result);
        }                                   
    }else{
        return "No hay opciones en la BD";
    }

?>

现在,当我尝试在jquery文件中使用代码时:

$('#email').click(function(event) {
        $.get('Controlador/cargarPaises.php', function(data) {      
            console.log(data);
        });
    });

我在控制台(谷歌浏览器)中得到了以下内容,我的数据库中的所有427条记录(我只显示了10条):

echo json_encode($result); i got in console 

{"idPais":"1","nombre":"Mexico"}
{"idPais":"3","nombre":"Albania"}
{"idPais":"4","nombre":"Alemania"}
{"idPais":"5","nombre":"Andorra"}
{"idPais":"6","nombre":"Angola"}
{"idPais":"7","nombre":"Antigua y barbuda"}
{"idPais":"8","nombre":"Antillas holandesas"}
{"idPais":"10","nombre":"Argelia"}

现在的问题是我怎样才能玩#34;用变量&#34;数据&#34;填充选择的HTML元素。

2 个答案:

答案 0 :(得分:1)

首先,你的cargarPaises文件中有一个错误。您正在为每一行回显对象的json编码 - 您可能实际上希望将对象数组作为单个json结果返回。您还返回一个错误字符串,而不是一个让您知道的对象。最后,您将获得PDO语句的计数,而不是rowCount。这样的事情会更好:

if ($datos->rowCount() > 0) {       
    echo json_encode($datos->fetchAll(PDO::FETCH_ASSOC));
} else {
    echo json_encode(array());
}

我可能还会修改你的.get调用,以便明确声明你正在获取json,然后添加类似下面的内容来构建选项:

$.get('Controlador/cargarPaises.php', function(data) {      
    $.each(data, function(idx, opt) {
        $('#myselect').append('<option value="' + opt.idPais + '">' + opt.nombre + '</option>');
    });
}, 'json');

答案 1 :(得分:0)

public function cargarPaises(){
    $modelo = new Conexion();
    $conexion = $modelo->get_conexion();
    $sql = "select idPais, nombre from paises where 1"; //changed
    $statement = $conexion->prepare($sql);
    return $statement->fetchAll(PDO::FETCH_ASSOC);  //changed    
}

第二个文件

require_once('../Modelo/class.conexion.php');
require_once('../Modelo/class.consultas.php');

$consultas = new Consultas();
$datos = $consultas->cargarPaises();
$results = (count($datos) > 0) ? $datos : array("error"=>"No hay opciones en la BD");

echo json_encode($results);