2014-12-21 4 views
1

AJAX 검색을 작동 시키려고하는데, 저는이 문제에 매우 가깝습니다. 여기에 내가 사용하고있는 PHP가있다. \ XAMPP \ htdocs를 \ searchSuggest.php 라인 (23)에데이터베이스에서 json 데이터를 가져 오는 동안 MYSQL 오류 코드가 표시됩니다.

: - :

주의 사항 : 가정 F에서 '제품명' 정의되지 않은 상수 제품명의 사용

<?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

내가 표시 할 유일한 것은 JSON 개체의 '아이맥'부분은

+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에 대한 오류 메시지, 그래서 당신은 정의되지 않은 상수 인 ProductName 인 json 문자열에 연결하려고합니다. 그리고 그것은 정확히 경고가 말한 것입니다. 정의되지 않은 상수 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']); 
관련 문제