2012-10-25 65 views
0

我想用PHP向數據庫添加一些值我從Android應用程序發送一些參數,他們也以正確的方式到達。我用回聲檢查了它並打印了我發送的所有參數。SQL插入不工作

id (PRIMARY_KEY, AUTO_INCREMENT) 

deviceID (TEXT) 

name (TEXT) 

latitude (TEXT) 

longitude (TEXT) 

這就是結構和數據庫的名稱是位置

這是我的查詢,但它只是doesent工作。

$deviceID = $_POST['deviceID']; 
    $name = $_POST['name']; 
    $latitude = $_POST['latitude']; 
    $longitude = $_POST['longitude']; 

$result = mysql_query("INSERT INTO position(deviceID, name, latitude, longitude) VALUES('$deviceID', '$name', '$latitude', '$longitude')"); 
+5

有一個明顯的原因可能會失敗 - 你沒有以任何方式逃脫你的輸入。任何輸入字段中的單引號將打破整個查詢。例如'$ name =「O'Brien先生」;'會打破你的查詢,而且它非常容易受到SQL注入的攻擊。 –

+7

什麼是錯誤? – wesside

+0

'echo mysql_error()'我的賭注是'檢查手冊中正確的語法使用附近',然後從您的輸入中的一些字。 –

回答

2

http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_position

Position是在MySQL的函數名稱:你應該使用反引號(`)逃避它,你需要position和括號之間添加一個空格。

$result = mysql_query("INSERT INTO `position` (deviceID, name, latitude, longitude) VALUES('$deviceID', '$name', '$latitude', '$longitude')"); 
+1

這是一個函數名稱,但[不是保留字](http://dev.mysql.com/doc/refman/5.1/en/reserved -話。HTML)所以它是引起問題的空間而不是引用 - 它被誤解爲函數調用。 –

+0

是的,我只是忘記了空間-.- – alexj

0

聽着,你需要停止使用過時的mysql_*功能。他們會引起你很多頭痛。我建議你設置mysql來使用PDO。這是一個例子。

首先連接到它,並讓它爲您處理異常。

try { 
    $pdo = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 

現在運行您的更新。

try { 
    $stmt = $pdo->prepare('INSERT INTO position VALUES(:deviceId, :name, :latitude, :longitude)'); 
    $stmt->execute(array(
    ':deviceId' => $deviceID, 
    ':name' => $name, 
    ':latitude' => $latitude, 
    ':longitude' => $longitude 
)); 

    // Affected Rows? 
    echo $stmt->rowCount(); // 1 

} catch(PDOException $e) { 

    echo 'Error: ' . $e->getMessage(); 
} 

//根據您的問題json_encode

調用​​聲明以同樣的方式後(但有SELECT),你只需要做到這一點。

$results = $stmt->fetchAll(PDO::FETCH_ASSOC); // This will be an array 
$json_results = json_encode($results); 

後來的路線,如果你想要得到它作爲一個對象(我更喜歡一起工作)

$results = $stmt->fetchAll(PDO::FETCH_OBJ); 

此外,如果你想獲得一個結果,使用fetch()

$result = $stmt->fetch(PDO::FETCH_ASSOC); 
+0

我正在使用JSON對結果進行編碼,然後回顯它們,我如何使用PDO執行此操作? – alexj

+0

@alexj更新。 – wesside

+0

這只是我查詢中的空間。非常感謝你的解決方案,我會看看PDO和我有什麼優勢 – alexj