2014-12-21 110 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']);