php Prepared Statement给我JSON格式错误

时间:2016-02-21 10:54:28

标签: php arrays json prepared-statement

当我的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)){

我认为这是错误的。

我该如何解决这个问题?

2 个答案:

答案 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()