获取MYSQL错误代码,而试图从数据库中获取JSON数据
问题描述:
我想获得一个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的” 部分
答
的修复
这条线是不正确的:
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;
}
答
你可能想:
echo($all[$i]['ProductName']);
为什么这个问题越来越下降投票(它的标题回升,但在 - 2)?这是一个没有经验的用户,有一个简单的错误,但是这有什么问题?他提供了一个代码示例,一个错误的例子,并清楚地说明了他的问题。没有什么不妥。 – Stuart