我正在努力让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”部分
答案 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']);