PHP的SQL搜索问题

时间:2018-10-30 10:49:04

标签: php sql

好的,这是我的代码,也许有人可以在这里解释我做错了什么,因为我不明白。我的理解是,如果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

2 个答案:

答案 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条语句 希望这会有所帮助