2011-12-29 33 views
1

我正在寫一個android程序,它使用http post連接到一個php腳本來連接到mysql數據庫。查詢是要發送的變量。Android連接到MySQL使用PHP,字符串查詢錯誤

這裏是我的代碼部分:

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是包含我要查詢的郵件的字符串。不過,我不斷收到與此語法錯誤。如果我拿走線consumeremail ='「+ consumer_email +」'「,它能夠處理沒有錯誤。

我想問什麼,如果有任何方法可以解決這個問題?是圍繞電子郵件引發問題的單引號?

+3

你會得到什麼錯誤?什麼返回錯誤,php腳本,sql服務器,android程序? – Nanne 2011-12-29 19:55:04

+1

哇,你剛剛實現了一個名爲SQL Injection的功能,它的意義不大。你很幸運,因爲你真的要拋開你的代碼,並改變你如何告訴PHP腳本通過參數本身獲得哪些數據(不是SQL查詢!) – hakre 2011-12-29 19:55:14

+0

可能我最後的評論是一個有點不友好,你可能正在尋找:[MySQL over HTTP](https://launchpad.net/httpmysql) – hakre 2011-12-29 19:58:51

回答

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