当我的php
代码不是prepared statement
时,它可以正常工作 - 但是当它是一个准备好的语句时,它会给我一个json malformed error
。在调试我的代码一段时间之后,我意识到我的if
语句有问题,并且当它是prepared statement
时它应该是不同的。我不知道该改变什么,但这是我的代码:
$statement = "SELECT userID, forename, surname, email, age FROM employees WHERE forename = ?"
$outcome = $conn -> prepare($statement);
$outcome->bind_param('s', $forename);
$outcome->execute();
$outcome->close();
$outcomearray = array();
echo json_encode("It works as of now"); // This bit works and the message is echoed
// From this point, it is giving me errors and problems
if(mysqli_num_rows($outcome)){
while($line = mysqli_fetch_assoc($outcome)){
$outcomearray[] = array
(
"userID" => $line["userID"],
"forename" => $line["forename"],
"surname" => $line["surname"],
"username" => $line["username"],
"email" => $line["email"],
"age" => $line["age"]
);
}
echo json_encode($outcomearray);
}
以下两行:
if(mysqli_num_rows($outcome)){
while($line = mysqli_fetch_assoc($outcome)){
我认为这是错误的。
我该如何解决这个问题?
答案 0 :(得分:1)
$stmt = $conn->prepare(
"SELECT userID, forename, surname, email, age FROM employees WHERE forename = ?"
);
$stmt->bind_param('s', $forename);
$stmt->execute();
$rows = array();
$result = $stmt->get_result();
while($line = $result->fetch_assoc()){
$rows[] = $line;
}
print json_encode($rows);
$conn->close();
请注意,这是返回JSON共振时的典型模式。如果没有匹配则渲染一个空数组 - 因此没有必要检查行数。
如果您出于任何原因需要,可以从num_rows
对象的mysqli_result
属性中获取行数:
$result = $stmt->get_result();
if ((bool) $result->num_rows) {
}
另请注意,fetch_assoc的重点是获取关联数组。因此,如果列名与您想要生成的JSON对齐,则无需逐个映射键。
答案 1 :(得分:-1)
尝试使用
$outcome->num_rows;
OR
mysqli_stmt_num_rows($outcome);
也可以使用
$outcome->bind_result('userID','email', 'age', 'surname', 'forename');
$outcome->fetch()
而不是
mysqli_assoc_fetch()