2011-12-29 4 views
1

http postを使用してMySQLデータベースに接続するPHPスクリプトに接続するAndroidプログラムを作成しています。 queryは送信される変数です。そのconsumer_email iが照会するメールを含む文字列ですPHPを使用してMySQLに接続しているAndroid、文字列クエリのエラー

String query = "select `retailer`.`name` as `retailer`, `product`.`name` as `product`, `product`.price, `promotion`.discount, `promotion`.discount_type"; 
     query = query.concat(" from `retailer`, `consumer`, `product`, `promotion`, `sell`, `proximity`"); 
     query = query.concat(" where `consumer`.`email` = '"+consumer_email+"'"); 
     query = query.concat(" and `proximity`.`retailer_id` = `retailer`.`id`" + 
       " and `proximity`.`consumer_id` = `consumer`.`id`" + 
       " and `sell`.`retailer_id` = `retailer`.`id`" + 
       " and `sell`.`product_id` = `product`.`id`" + 
       " and `product`.`promotion_id` = `promotion`.`id`"); 

注:ここでは

は、私のコードの一部です。しかし、私はこれで構文エラーを取得し続けます。もし私がラインconsumerを取り去ったら。 email = '' + consumer_email + '' "は、エラーなしで処理することができます。

この問題を解決する手段があるかどうか質問したいと思いますか?このように準備された文?

+3

どのようなエラーが表示されますか?どのようなエラー、PHPスクリプト、SQLサーバー、アンドロイドプログラムを返すのですか? – Nanne

+1

うわー、あなたはSQLインジェクションと呼ばれる機能を実装したばかりです。あなたは本当にあなたのコードを投げ捨てて、パラメータ(SQLクエリではない)によって取得するデータをPHPスクリプトに伝える方法を変更する必要があるので、これはとても早いです。 – hakre

+0

おそらく私の最後のコメントはあなたはこれを探しているかもしれません:[HTTP over MySQL](https://launchpad.net/httpmysql) – hakre

答えて

1

使用。

これはまた、安全で、SQLインジェクションハッキングを防ぐ。あなたが見ているエラーを排除します。

代わりに直接問い合わせ、使用中の電子メールアドレスを交換します"?"を指定し、実行時に値をバインドします。
http://php.net/manual/en/pdo.prepared-statements.php

String query = ......<rest of query> 
    query = query.concat(" where `consumer`.`email` = ?); 
    ......<rest of query> 

    $db = new mysqli('localhost', 'username', 'password', 'database'); 
    // Create statement object 
    $stmt = $db->stmt_init(); 


// Create a prepared statement 
if($stmt->prepare(query)) { 
    $stmt->bind_param('s', $email_id); 

    // Set your variable  
    $email_id= "[email protected]"; 

    // Execute query 
    $stmt->execute(); 
} 
関連する問題