2012-07-06 55 views
1

我將通過GET請求向PHP代碼發送請求。它會通過幾個參數。我將在我的select語句的WHERE子句中使用這些參數。GET請求 - 無法從數據庫執行SELECT語句

GET請求

HTTP://本地主機/服務器/ person.php ID = 1 &年齡= 12 & hieght = 100

PHP代碼

<?php 
$connection = mysql_connect("localhost","user","pwd"); 
if (!$connection) 
    { 
    die('FAIL: ' . mysql_error()); 
    } 
mysql_select_db("db", $connection); 
$result = mysql_query("SELECT * FROM Person where hieght='$_GET[hieght]"); 
$num_rows = mysql_num_rows($result); 
?> 

我認爲我的PHP代碼是錯誤的。我不確定這是否是從GET請求中獲取變量的方法。

+3

''_ _GET [hight]''你似乎錯過了''',應該是''_GET [hieght]'',並且順便說一下,這很容易被SQL注入,需要一些時間清理它或使用'PDO'來代替。 – tradyblix 2012-07-06 05:29:00

+0

你打敗了我。而且,使用「高度」而不是「高度」,這可能是另一個錯字。 – arik 2012-07-06 05:30:10

回答

2

要從$_GET使用得到的變量,作爲一個例子來獲得從$_GET陣列高度可以寫

$height=$_GET['height']; 

所以你可以寫

$result = mysql_query("SELECT * FROM Person where hieght='".$hieght."'"); 

或可以寫

$result = mysql_query("SELECT * FROM Person where hieght='".$_GET['height']."'"); 

更新:

使用mysql_real_escape_string防止SQL注入,像

$height=$_GET['height']; 
$result = mysql_query("SELECT * FROM Person where hieght='".mysql_real_escape_string($hieght)."'"); 

$result = mysql_query("SELECT * FROM Person where hieght='".mysql_real_escape_string($_GET['height'])."'"); 
1

使用此

$height = $_GET['hieght']; 
$result = mysql_query("SELECT * FROM Person where hieght='$height'"); 

而不是

$result = mysql_query("SELECT * FROM Person where hieght='$_GET[hieght]"); 

請注意,這個代碼很可能是SQL 注射

+0

我如何解決它,你能幫我 – Illep 2012-07-06 05:33:31

+0

@Illep,你有很多收到的答案和意見,閱讀並做到這一點。 – tradyblix 2012-07-06 05:34:33

+0

不是答案,我在詢問你所做的SQL注入評論 – Illep 2012-07-06 05:35:24

1

的受害者,你也可能會想用這個CONCAT:

mysql_query("SELECT * FROM Person where hieght='".$_GET['hieght']."'"); 
+0

這應該是'$ _GET ['hieght']'不是'$ _GET [hieght]' – 2012-07-06 05:33:33

+2

是的,這是正確的,我的道歉。 – test 2012-07-06 05:44:32

1
$result = mysql_query("SELECT * FROM Person where hieght='".$_GET['hieght']."'"); 

一個很好的調試技術時你感覺你的是將SQL放入一個字符串 ,你可以登錄並查看它是否是你期望的。 使用mysql_error()後的查詢可能已經給你一個提示太...

$sql = "SELECT * FROM Person where hieght='".$_GET['hieght']."'"; 
$result = mysql_query($sql); 
#Not for production code, but handy while learning - error goes into web server log. 
error_log("SQL=$sql, error=".mysql_error()); 
1

你應該分析輸入這樣的注射:其次

<?php 

    $myHeight = mysql_reaL_escape_string($_GET['height']); 

    $connection = mysql_connect("localhost","user","pwd"); 
    if (!$connection) 
    { 
     die('FAIL: ' . mysql_error()); 
    } 
    mysql_select_db("db", $connection); 
    $result = mysql_query("SELECT * FROM Person where height=$myHeight"); 
    $num_rows = mysql_num_rows($result); 
?> 

,你也應該使用PHP PDO對象而不是舊的mysql_query等