我有一个数据库,在users表中有“firstname”和“lastname”列。使用ajax,我想获取所有名字以s开头的用户,然后在列表中显示他们的名字和姓氏。所以它应该告诉我:
莎拉安德森
肖恩·韦斯特
这是我用来获取用户列表的:
public function searchName($searchName)
{
$pdo = Db::connect();
$stmt = $pdo->prepare("SELECT firstname, lastname FROM users WHERE firstname LIKE :searchName OR lastname LIKE :searchName");
$stmt->execute(['searchName' => '%' . $searchName . '%']);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
这是我用来循环结果的js函数
function viewResults(result) {
const results = document.getElementById("results");
results.innerHTML = "";
for (let i = 0; i < result.length; i++) {
const li = document.createElement("li");
li.innerHTML = result['i'];
results.appendChild(li);
}
}
当我运行这个时,它会显示正确数量的列表项,但是所有的列表项都是“未定义的”。我不能使用:
li.innerHTML = result['i']['firstname']['lastname'];
当我使用fetch()而不是fetchall()时,上面的方法可以很好地工作,唯一的问题是fetch()只返回一个用户。我猜问题是fetchall()在数组中返回一个数组?我尝试在sql查询中同时使用foreach和while,但都没有用。
1条答案
按热度按时间13z8s7eq1#
问题如下:
另外,你也尝试过:
这个
result
对象是一个数组,因此它没有名为“i”的属性。你需要使用这个变量i
,而不是字符串文字“i”。所以访问result[i]
.第二,当你找回
firstname
属性,您将得到一个字符串。但是你想找个地方住lastname
那根绳子的长度。那是行不通的。相反,你应该找回lastname
分开,继续result[i]
.最后,最好不要使用
innerHTML
指定纯文本时。innerHTML
用于分配html编码的数据。使用textContent
对于纯文本数据。所以,这一行应该是:
当使用
for...of
循环分解: