2011-08-04 41 views
1

我想給數據庫的Android應用程序搜索,但語句當我搜索與SQL syntaxs「LIKE」字符串元素,PHP錯誤無法檢索像Android應用程序

如:

SELECT * FROM `test123` WHERE (`name` LIKE '%A%') 

它會給我一個錯誤:

A JSONArray text must start with '[' at character 1 of .... 

,但如果我搜索:

SELECT * FROM `test123` 

它會正常工作。

<?php 

mysql_connect("website.com","root","password"); 
mysql_select_db("test123"); 

$q=mysql_query($_REQUEST['sql']); 
while($e=mysql_fetch_assoc($q)) 
    $output[]=$e; 

print(json_encode($output)); 

mysql_close(); 
?> 
+2

我真誠地希望'mysql_query($ _ REQUEST ['sql'])'僅用於測試目的...... – deceze

+0

@ user870077你可以在你的Android應用程序端包含一些代碼。我很確定問題在那裏。 –

回答

0

這應該只是

"SELECT * FROM test123 WHERE name LIKE '%A%'" 
+0

但是,只有當查詢返回至少1行時,這纔會起作用。 OP的代碼仍然有一個基本缺陷;當查詢沒有返回行時,它返回格式錯誤的JSON。 – Asaph

0

我認爲這可能是做工精細SELECT * FROM test123name)WHERE(name LIKE '%A%')

0

當我用戶php json_encode它總是返回一個JSONObject,而不是JSONArray。嘗試打印您的原始結果logcat的,看什麼形式在不在。

+1

當你給它一個對象或關聯數組時,'json_encode'將返回一個對象。具有數字鍵的數組將返回一個數組。使用選項「JSON_FORCE_OBJECT」調用'json_encode'將始終返回一個對象。 –

+0

感謝澄清 - 我總是使用關聯數組,所以這是有道理的。 – Pikaling

3
$output = array(); 
while ($e = mysql_fetch_assoc($q)) { 
    $output[] = $e; 
} 

問題可能僅僅是如果沒有結果,$output從未定義。當你再嘗試json_encode($output),PHP拋出一個警告有關$output被不確定,從而導致最終的輸出,如:

PHP Notice: Undefined variable: output in ... 
null 

這是無效的JSON。即使您的警告被抑制,輸出將只是null,這不是JSON數組。如果你的客戶希望有一個數組,那麼它會對null感到失望。

始終初始化您的變量。

+0

擊敗我:-) –

相關問題