2016-08-22 3 views
-1

アンドロイドアプリで使用するjson文字列を作成するときに問題が発生しました。私は多くのチュートリアルに従っていましたが、私が必要としていたことは決して正確ではありませんでした。私はこのJSONのことを理解していませんでした。だから私はそれを私が望むように変更することができませんでした。jsonの文字列をエコーするPHPファイルに関する問題

まず私はこの試みた:http://programmerguru.com/android-tutorial/android-restful-webservice-tutorial-how-to-create-restful-webservice-in-java-part-2/

をしかし、これはログインしていたが、私はただの行を読み込み、データを表示したいです。

多分誰かが私を助けて、私がそれを機能させるために何をしなければならないか説明することができます。 ファイルは、都市と国のパラメータと一致するMySQLデータベースのテーブルから行をフェッチし、json文字列として返します。

更新: 私は今ではPDO_MYSQL拡張を使用し、新しい.phpファイルを持っています。 しかし、私は、エラー、次のGetコマンドラインからファイルを実行しようとすると:

致命的なエラー:未定義のメソッドDB_CONNECT_PDOに呼び出し::ライン上get_data_pdo.phpに()15個の

私のファイルを準備します。

db_connect_pdo.php:

クラス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

+1

「実行しようとすると、何も表示されません」これを実行しようとした正確な方法を教えてください。 POSTリクエストを送信しましたか? –

+0

$ return_arrにはどこの値がありますか?あなたが示したことから、私は$ return_arrがnullになることを期待しています。したがって、何もないように見えるヌルをエコーする必要があります。 – kainaw

答えて

1

あなた$con変数がgetData.phpに定義されていません。

$sql = ... 

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

$result = ... 

重要:mysql_connectは5.5をPHPから非推奨と7.0で削除されています。私はそれを使用することを強く勧めます。 PDO_MYSQL拡張を参照する必要があります。 詳細についてはhttp://php.net/manual/en/function.mysql-connect.php

また、のSQLインジェクションも参照してください。クエリでエスケープされていないユーザー入力を使用することは、大きなセキュリティ上の欠陥です。 PDOは、SQLインジェクションを処理するためのプリペアドステートメントとパラメータバインドを提供します。

編集: @tadmanが指摘したように、mysql_*mysqli_*を混在させる問題もあります。接続はmysql_*を使用して確立され、mysqli_*はクエリを展開して結果をフェッチするために使用されます。

編集2:変更$stmt = $db->prepare(...);あなたが代わりにあなたがDB_CONNECT_PDO::connectで作成しPDOオブジェクトを使用する必要があり、PDOの書類を作成するために使用することができ、DB_CONNECT_PDOクラスのインスタンスである$db

$stmt = $con->prepare(...);へ。

運が良かった!

+1

これに 'mysqli_ *'と 'mysql_ *'を混在させる問題もあります。 – tadman

+0

@tadman:いいキャッチ!あなたは、絶対に正しい。私は答えを編集しました。ありがとう! +1 –

+0

ありがとうございます。私はあなたの提案したアプローチをハードコードされた変数値でMySQLのPDOで使用しようとしましたが、致命的なエラーが発生しました:行15の/Applications/MAMP/htdocs/get_data_pdo.phpの未定義のメソッドDB_CONNECT_PDO :: prepare()私は実行しようとしています:$ stmt = $ db-> prepare( "SELECT * FROM dbtable WHERE city =?AND country =?"); PDOドライバはPHP 5.1.0以降で有効にする必要があります。私は7.0.8を使用しています。元の質問を編集して新しいファイルを新しいPDOコードで更新する必要がありますか?事前に感謝し、迷惑を掛けて申し訳ありません。 – boehmP

0

私はあなたに問題

  1. ファイル名があなたの接続オブジェクトを返すことが期待されている「db_connect.php」ですが、あなたのコード内であなたが「dbConnect.phpを呼び出しているを与えられるかもしれない3つの事を観察しました「

  2. の$ return_arrはまたあなたのgetDataを実行し、ハードコード市と国にしようと、あなたがgetData.phpにPOSTリクエストを送信しない可能性があり、あなたが応答期待している。この

  3. を修正しようと定義していません。 php。あなたはすばらしくなるはずです

+0

ありがとう、私はファイル名を置き換え、ハードコードされた変数値を使用しようとしました。私は結果とチェック変数をエコーし​​ようとしましたが、何も働かなかった。だから私は@MladenIlićが提案したPDOアプローチを試みました。しかし、今私は別の問題(500内部サーバーのエラー)があります。彼の答えの下に私のコメントを見てください – boehmP

+0

500内部サーバーエラーは、予期しない条件が発生し、より具体的なメッセージが適切でない場合に与えられる一般的なエラーメッセージです。とにかくこれはあなたのPHPファイルからです。あなたの質問をコピーして、あなたのデータベースでそれを実行し、あなたが出力を持っているかどうかを確認してください。 –

関連する問題