php 准备好的声明给我 JSON 格式错误
php Prepared Statement giving me JSON Malformed
我的 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)){
我认为是错误的。
我该如何解决这个问题?
尝试使用
$outcome->num_rows;
或
mysqli_stmt_num_rows($outcome);
也用
$outcome->bind_result('userID','email', 'age', 'surname', 'forename');
$outcome->fetch()
改为
mysqli_assoc_fetch()
$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 共振时的典型模式。如果没有匹配你呈现一个空数组 - 因此没有真正需要检查行数。
如果出于某种原因需要,您可以从 mysqli_result
对象的 num_rows
属性 中获取行数:
$result = $stmt->get_result();
if ((bool) $result->num_rows) {
}
另请注意,fetch_assoc 的重点是获取关联数组。因此,如果您的列名与您要生成的 JSON 一致,则无需一一映射键。
我的 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)){
我认为是错误的。
我该如何解决这个问题?
尝试使用
$outcome->num_rows;
或
mysqli_stmt_num_rows($outcome);
也用
$outcome->bind_result('userID','email', 'age', 'surname', 'forename');
$outcome->fetch()
改为
mysqli_assoc_fetch()
$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 共振时的典型模式。如果没有匹配你呈现一个空数组 - 因此没有真正需要检查行数。
如果出于某种原因需要,您可以从 mysqli_result
对象的 num_rows
属性 中获取行数:
$result = $stmt->get_result();
if ((bool) $result->num_rows) {
}
另请注意,fetch_assoc 的重点是获取关联数组。因此,如果您的列名与您要生成的 JSON 一致,则无需一一映射键。