2014-12-21 111 views
1

我想獲得一個AJAX搜索工作,我非常接近這一點。這是我使用的PHP。獲取MYSQL錯誤代碼,而試圖從數據庫中獲取JSON數據

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "Products"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $searchValue = $_GET['search']; 

    if(isset($searchValue) && $searchValue != ''){ 
    $search = addslashes($searchValue); 
    $statement = $conn->prepare("SELECT ProductName FROM Product WHERE ProductName LIKE('" . $search . "%') ORDER BY ProductName"); 
    $statement->execute(); 


    $all = $statement->fetchAll(PDO::FETCH_ASSOC); 
    for($i=0; $i<count($all);$i++){ 
     echo json_encode($all[$i]).ProductName; 
    } 
    } 

} 
catch(PDOException $e) 
{ 
    echo "Error: " . $e->getMessage(); 
} 

$conn = null; 
?> 

這個responseText我得到的是這樣的:

注意:未定義的常量產品名稱用途 - 假設 '產品名稱' 在F:\ XAMPP \ htdocs中\ searchSuggest.php上線23

{「ProductName」:「iMac」}產品名稱

注意:使用undefined constant ProductName - 假設'ProductName' 在F:\ xampp \ htdocs \ searchSuggest.php在線23

我想顯示的唯一事情是JSON對象的 「iMac的」 部分

+0

爲什麼這個問題越來越下降投票(它的標題回升,但在 - 2)?這是一個沒有經驗的用戶,有一個簡單的錯誤,但是這有什麼問題?他提供了一個代碼示例,一個錯誤的例子,並清楚地說明了他的問題。沒有什麼不妥。 – Stuart

回答

2

的修復

這條線是不正確的:

echo json_encode($all[$i]).ProductName; 

它看起來就像您試圖將productName作爲屬性一樣,但運算符爲->

echo json_encode($all[$i])->ProductName; 

雖然這一行仍然不正確。 json_encode的結果不是一個對象,而是一個字符串。要解決這個問題的正確方法,是由數組鍵使用使用fetchall的數組結果,並獲得產品名稱:

echo $all[$i]['ProductName']; 

錯誤消息

.操作是字符串concatination,所以你正試圖concordate到json字符串,常量ProductName,這是沒有定義。這正是警告所說的:您正在使用未定義的常量ProductName,所以PHP假設您的意思是常量字符串'ProductName'

使用->它仍然不起作用,因爲json_encode返回一個字符串,而不是一個對象。你可以再次json_decode,但這是浪費處理時間。

可能的解決方案

你似乎在試圖把結果作爲對象。這將是做過這樣的:

$all = $statement->fetchAll(PDO::FETCH_OBJ); 
for($i=0; $i<count($all);$i++){ 
    echo $all[$i]->ProductName; 
} 

或本:

while ($row = $statement->fetch(PDO::FETCH_OBJ)) { 
    echo $row->ProductName; 
} 
+0

它不這樣工作。 'json_encode()'產生一個字符串而不是一個對象。 – axiac

+0

@axiac是的,描述有點不清楚。我希望你現在發現更好? – GolezTrol

+0

好得多。 +1爲更新的答案:-) – axiac

0

你可能想:

echo($all[$i]['ProductName']);