2014-05-20 152 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 –