更新:
我在mysqli中需要帮助时遇到一些错误和警告:
Fatal error: Call to undefined method mysqli_stmt::get_result() in ... on line 63
在下面的代码中,是否有人知道如何处理这些警告和错误?
$query = "SELECT * FROM Teacher WHERE TeacherAlias = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$getid);
// execute query
$stmt->execute();
//get results
$result = $stmt->get_result();
$numrows = mysqli_num_rows($result);
if ($numrows == 0){
// don't use $mysqli->prepare here
$query = "SELECT * FROM Teacher WHERE TeacherUsername = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$getuser);
// execute query
$stmt->execute();
}
答案 0 :(得分:2)
您首先需要检索mysqli_result对象,例如......
$res = $stmt->get_result();
...然后从此对象获取行数(不是$stmt
):
$numrows = mysqli_num_rows($res);
更新: get_result
方法仅适用于PHP 5.3及更高版本,旧版本应使用以下方法:
// $stmt preparing code goes here...
$stmt->execute();
$stmt->store_result();
$num_rows = $stmt->num_rows;
doSomethingWith($num_rows);
// processing cycle:
$stmt->bind_result($some_param, $another_param);
while ($stmt->fetch()) {
doSomethingElseWith($some_param, $another_param);
}
$stmt->free_result();
$stmt->close();
作为旁注,有两条建议:1)在这里使用单个查询可能会更快并同时在TeacherAlias和TeacherUsername字段中查找值(使用OR运算符,如TeacherAlias = ? OR TeacherUsername = ?
); 2)在查询中使用明确声明的列(SELECT id, TeacherAlias AS alias, TeacherUsername AS username...
)而不仅仅是(SELECT *
)会更容易。
答案 1 :(得分:0)
我不习惯和msqli合作,但我会尽力回答你, 所以首先,哟说程序,“如果请求的结果等于0然后重新启动所有。这不是很好,你没有使用资源。就像raina77ow说,你想使用
$res = $stmt->get_result();
和此:
$numrows = mysqli_num_rows($res);
然后你不再需要你的条件了......
答案 2 :(得分:0)
您需要先获取数据,或free_result()
。
$stmt->fetch();
然后将其传递给mysqli_num_rows()
我建议的是,如果您不需要它,请跳过提取:
$stmt->num_rows;
这将计算结果中的行数而无需获取它,并清除光标。