好的,这是我的代码,也许有人可以在这里解释我做错了什么,因为我不明白。我的理解是,如果stmt找到结果,它将在{}中运行代码并因此返回结果。如果没有结果,则它将不返回任何内容,因为IF语句为false。但是,即使我搜索的ID错误,我仍会得到邮递员的回报。它在表上不存在。为什么我会得到回报?
public function getDoc($ID){
if( $xromstmt = $this->con->prepare("SELECT adegree, bdegree, cset, dset FROM xromdb WHERE ID = ?")) {
$xromstmt->bind_param("s", $ID);
$xromstmt->execute();
$xromstmt->bind_result($adegree, $bdegree, $cset, $dset);
$xromstmt->fetch();
$evalxrom = array();
$edocxrom = array();
some other code here dealing with the return etc... } <-- the end bracket
to the if statement. There is nothing past this bracket.
} bracket to getDoc
答案 0 :(得分:0)
您拥有的if
语句只是在检查prepare
是否成功。要查看查询是否返回了任何数据,您需要检查对fetch
的调用结果。尝试这样的事情:
if ($xromstmt = $this->con->prepare("SELECT adegree, bdegree, cset, dset FROM xromdb WHERE ID = ?")) {
$xromstmt->bind_param("s", $ID);
$xromstmt->execute();
$xromstmt->bind_result($adegree, $bdegree, $cset, $dset);
if ($xromstmt->fetch()) {
$evalxrom = array();
$edocxrom = array();
...
some other code here dealing with the return etc...
}
}
您可能还应该检查对execute
的调用结果。
答案 1 :(得分:0)
$xromstmt->prepare
语句不搜索它设置搜索的数据库;直到$xromstmt->execute
才搜索数据库。如果语句正确运行(即代码中没有错误),则无论是否找到任何结果,execute和prepare语句都将返回true或false。
您要使用的是查询的行数,如果未找到结果,则为0:
$num_rows = mysql_num_rows($xromstmt)
然后运行$ num_rows条语句 希望这会有所帮助