尝试从数据库中获取json数据时获取MYSQL错误代码

时间:2014-12-21 14:30:00

标签: php mysql json

我正在努力让AJAX搜索工作,我非常接近这一点。这是我正在使用的PHP。

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

  

注意:使用未定义的常量ProductName - 假设为'ProductName'   在第23行的F:\ xampp \ htdocs \ searchSuggest.php

     

{ “产品名称”: “的iMac”}产品名称

     

注意:使用未定义的常量ProductName - 假设为'ProductName'   在第23行的F:\ xampp \ htdocs \ searchSuggest.php

我想要显示的唯一内容是json对象的“iMac”部分

2 个答案:

答案 0 :(得分:2)

修复

此行不正确:

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

看起来您正在尝试将productName作为属性,但其运算符为->

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

但这条线仍然不正确。 json_encode的结果不是对象而是字符串。修复它的正确方法是使用fetchAll的数组结果,并通过数组键获取产品名称:

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

错误消息

.运算符用于字符串连接,因此您尝试连接到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;
}

答案 1 :(得分:0)

你可能想要:

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