0

这是我一直坚持的数据库类的过去纸质问题。我只是在准备我的考试,所以可以给出答案。

考虑以下架构:

Borrow(userid: string, callnum: string, copynum: integer, checkout: date, return: date)

这是有错误的 PHP 函数。

function countCheckedOutBookCopies($callnum){

  $sql = "SELECT COUNT(*) AS bookcount FROM borrow

        WHERE return = null and callnum = '".$callnum."'";

  $stid = oci_parse($this->conn, $sql); //assume $this->con is correct

  if($row = oci_fetch_object($stid)){

    return $row->bookcount;

  } else{

    return -1;

  }

}

有3个问题。

1.找到错误并修复它。

2.出现另一个错误,修复它。

3.尽管一切都已修复,但功能始终如一return -1。为什么是这样?

我只熟悉使用 MySQL 的程序 PHP。但是我尝试运行代码并导致 $stid 一直返回布尔值,因为我不知道哪个部分是正确的,哪个部分是错误的。

这是我尝试过的事情

1.更改'".$callnum."'为简单'$callnum'(因为这是我在 MySQL 中一直这样做的方式)

2.return = null更改为return = 'null'(但我不认为是这种情况)

COUNT(*)3.也许得到而不是仅仅的概念有问题*

编辑:只是一个想法:我觉得 oci8 和 MySQL 做的事情几乎相同,但是有理由更喜欢一个吗?我敢肯定 MySQL 是比较流行的,但我的学校似乎更喜欢使用 oci8 做考试题

提前致谢!

4

1 回答 1

0

尽管出现“查找错误”和“发生另一个错误”:

1.) " return is null",

2.)this->conn可能应该是this->con,

3.)代码丢失oci_execute($stid);

4.) oci_free_statement($stid);

function countCheckedOutBookCopies($callnum){
  $sql = "SELECT COUNT(*) AS bookcount FROM borrow
        WHERE return is null and callnum = '$callnum'";
  $stid = oci_parse($this->con, $sql); //assume $this->con is correct
  oci_execute($stid);

  $ret = -1;
  if($row = oci_fetch_object($stid)){
    $ret = $row->bookcount;
  }
  oci_free_statement($stid);
  return $ret;

}
于 2013-05-09T20:21:30.727 回答