2011-07-19 40 views
0
$firstName = $_POST['firstName']; 
$sql = "SELECT firstName FROM `colleague` WHERE `lastName` 
    LIKE '%{$firstName}%' LIMIT 0, 5 "; 
$result = mysql_query($sql); 

爲什麼不這項工作不選擇一行,當我使用出了什麼問題我使用LIKE語句與PHP中的變量

while($row = mysql_fetch_array($result)){ 

$output[] = $row; 
    echo $output; 

} 

這將打印零和「數組」次

重複號這是我的Android程序

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
nameValuePairs.add(new BasicNameValuePair("firstName",value)); 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
HttpResponse response = httpclient.execute(httppost); 

我沒有在$ _ POST [ '的firstName']得到了什麼;

+0

事實上,$行是憑藉mysql_fetch_array –

+0

數組'$ hotelName = $ _POST [名字]',請看看http://docs.php.net/language.types .array#language.types.array.donts – VolkerK

+0

「$ hotelName = $ _POST [firstName]; ... SELECT firstName ... WHERE'lastName' LIKE'%{$ hotelName}%'」你的命名有些奇怪約定「......或者你正在盲目地複製代碼片段,希望得到某種方式的工作;-) – VolkerK

回答

1

您的PHP代碼有幾個錯誤。

  1. 您的SQL是可注入的,這是一個直接的安全風險。我們在這裏沒有解決這個問題,因爲它不在話下。
  2. 您試圖在echo $output中回顯數組。你不能回顯數組,它只會輸出'Array'。

請參閱下面的審查代碼。


// ADDED QUOTES. TODO: Implement SQL injection prevention here! 
$hotelName = $_POST['firstName']; 

// The {brackets} here, while valid, were unnecessary. 
$sql = "SELECT firstName FROM `colleague` WHERE `lastName` 
    LIKE '%$hotelName%' LIMIT 0, 5 "; 
$result = mysql_query($sql); 

// Fetch all rows, and store first names in array $output 
while($row = mysql_fetch_array($result)) $output[] = $row['firstName']; 

// Echo all first names with line breaks in between. 
echo implode("<br/>",$output); 
+0

你指的是什麼目的?如果您引用SQL注入保護,請查找有關參數化查詢的信息。尤其是在PHP中,請看[PDO](http://php.net/manual/en/book.pdo.php),它是mysql _....函數的OOP替代品。要快速修復當前的代碼,請查看[mysql_real_escape_string](http://php.net/manual/en/function.mysql-real-escape-string.php)。 –

0

它不選擇一行

你怎麼知道 - 直到你開始從結果提取行集?

,當我使用...這將打印的時間

零和「陣」重複數字,而是意味着它選擇行。如果你想看到的數據返回嘗試...

print implode(',',$row); 

,而不是

echo $output; 

你也應該添加一些錯誤處理,例如

$result = mysql_query($sql); 
if (!$result) { 
    print mysql_error(); 
    exit; 
}