关于回复json字符串的PHP文件的问题

时间:2016-08-22 18:13:08

标签: php android mysql json

我在创建一个json字符串时遇到了麻烦,现在在Android应用程序中使用了几天。我遵循了许多教程,但它从来都不是我需要的东西,我从来没有理解这个JSON的东西,尽管我试过。所以我无法按照我想要的方式修改它。

首先我尝试了这个:http://programmerguru.com/android-tutorial/android-restful-webservice-tutorial-how-to-create-restful-webservice-in-java-part-2/

但这与Logins有关,但我只是想读取行并显示数据。

也许有人可以帮助我并向我解释我必须做些什么才能使它发挥作用。 该文件应该从我的MySQL数据库中的一个表中获取一行,该表与city和country params匹配,并将其作为json字符串返回。

更新 我现在使用PDO_MYSQL扩展并拥有新的.php文件。 但是当我尝试从命令行执行该文件时,我得到以下错误:

致命错误:在第15行的get_data_pdo.php中调用未定义的方法DB_CONNECT_PDO :: prepare()

我的档案:

db_connect_pdo.php:

class DB_CONNECT_PDO {

// constructor
function __construct() {
    // connecting to database
    $this->connect();
}

// destructor
function __destruct() {
    // closing db connection
    $this->close();
}

/**
 * Function to connect with database
 */
function connect() {
    try{
    $db = new PDO('mysql:host=127.0.0.1;dbname=mydb;charset=utf8', 'myuser', 'mypass');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    }catch(PDOException $ex) {
        echo "An Error occured!";
        echo($ex->getMessage());
    }
    // returing connection cursor
    return $db;
}

/**
 * Function to close db connection
 */
function close() {
    // closing db connection
    mysqli_close();
}

}

get_data_pdo.php:

    $city = 'Berlin';
    $country = 'Germany';

    require_once('db_connect_pdo.php');

    try{
        $db = new DB_CONNECT_PDO();
        $con = $db->connect();

        $stmt = $db->prepare("SELECT * FROM dbtable WHERE city=? AND country=?");
        $stmt->execute(array($city, $country));
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

        if(isset($rows)){
            echo json_encode($rows);
        }else{
            echo 'failure';
        }
    }catch(PDOException $ex) {
        echo "An Error occured!";
        echo($ex->getMessage());
    }

我按照本教程进行连接和SQL查询:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#External_links

2 个答案:

答案 0 :(得分:1)

您的$con变量未在getData.php中定义。

$sql = ...

$db = new DB_CONNECT();
$con = $db->connect();

$result = ...

重要提示: mysql_connect自PHP 5.5以来已弃用,已在7.0中删除。我强烈建议不要使用它。你应该查找PDO_MYSQL扩展。 更多相关信息:http://php.net/manual/en/function.mysql-connect.php

您还应该阅读 sql injections 。在查询中使用未转义的用户输入是一个巨大的安全漏洞。 PDO提供预处理语句和参数绑定来处理sql注入。

编辑:正如@tadman指出的那样,还存在混合mysql_*mysqli_*的问题。使用mysql_*建立连接,mysqli_*用于执行查询并获取结果。

修改2 :将$stmt = $db->prepare(...);更改为$stmt = $con->prepare(...);

$dbDB_CONNECT_PDO类的一个实例,您可以使用它来准备pdo语句,而必须使用PDO中创建的DB_CONNECT_PDO::connect对象。

祝你好运!

答案 1 :(得分:0)

我发现了可能给你带来问题的3件事

  1. 文件名为' db_connect.php'预计将返回您的连接对象,但在您的代码中,您正在调用' dbConnect.php'

  2. $ return_arr也未定义尝试解决此问题

  3. 您可能不会向getData.php发送帖子请求而您正在等待响应,尝试对城市和国家进行硬编码然后运行您的getData.php。你应该没事的