2014-05-20 150 views
0

iam試圖讓一個PHP函數從url中取出參數並將其插入到數據庫中 我試圖通過在url中輸入「http://acstracking.com/dat.php?lat=0&lng=0」來檢查它,但是沒有插入發生什麼可以是問題?從url獲取參數

<?php 

$Lat = $_GET['lat'];  //Get Latitude Data 
$Long = $_GET['lng'];  // Get Longitude Data 
$type = "restaurant";   //marker type 
$name = "A.C.S";    //Name 
$add= "Bahrain"; 

$dbName = "uobtrack_acstracking"; //Database name 

$db = mysql_connect ("localhost","username", "password") or die("Unable To Connect "); //Connect to database 

$test= mysql_select_db ($dbName,$db) or die("Unable to select database"); //Test Connection 

$query = "INSERT INTO `uobtrack_acstracking`.`markers` (`name`, `address`, `lat`, `long`, `type`) VALUES ('$name', '$add', '$Lat', '$Long', '$type');"; //Insert Query 

$Alpha = @mysql_query($query,$db); //Execute Query 

if($Alpha) 
echo "<br> insertion succeeded..."; 
else 
echo "<br> insertion failed..."; 

mysql_close($db); //Close Connection 
} 
?> 
+0

看到的任何錯誤雖然不是說,但直接插入用戶輸入數據到數據庫可能是一個很大的錯誤,我會建議使用PDO庫適當的綁定,以便沒有註冊機會 – Neo

+0

從@mysql_query中刪除@以查看錯誤信息,同時使用echo mysql_errno($ db)。「:」。mysql_error($ db)。「\ n」;打印mysql錯誤 –

+0

mysql- lib自PHP 5.5.0起棄用,所以最好使用mysqli(例如mysqli_query())。另外,當你直接使用用戶輸入時,你的查詢對於SQL注入來說是多變的! 刪除查詢前面的@以獲取調試錯誤消息。你檢查類型的可兼容性嗎?你輸入所有的值作爲字符串。如果將lat域定義爲整數,可能會成爲問題。 – newBee

回答

0

我發現在您的語句中使用變量時(也容易發生SQL注入),MySql非常麻煩。我會推薦使用PDO。這很容易學習,並允許您使用準備好的語句。您可以調整下面的例子中,以滿足您的需求:

$opt = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
    // other options 
); 

$dbh = new PDO('mysql:host=localhost;dbname=yourDatabse;charset=utf8', 'yourUsername', 'yourPassword', $opt); 

$opt是錯誤報告

try { 
    $sql= "INSERT INTO `table`(`column1`, `column2`) VALUES(:exampleX, :trialX)"; 
    $stmt = $dbh->prepare($sql); 
    $stmt->bindParam(':exampleX', $example, PDO::PARAM_STR); 
    $stmt->bindParam(':trialX', $trial, PDO::PARAM_STR); 
    $stmt->execute(); 

} catch(PDOException $ex) { 
    echo "An Error occured!"; //user friendly message 
    echo ($ex->getMessage()); 
} 

try {...} catch {...}作爲一種方式來顯示錯誤。當您看到:something時,這是一個使您能夠在語句中擁有變量的參數。原因在參數不使用變量名($stmt->bindParam(':trialX', $trial, PDO::PARAM_STR);而不是$stmt->bindParam(':trial', $trial, PDO::PARAM_STR);是,當我便問類似的問題時,告訴我,不要對參數名稱使用一個變量名。

這可能看起來很複雜(仍然是對我來說),但我希望它能回答你的問題

+0

感謝這真的幫助我非常感謝你的努力和時間:D –