使用PHP和oci8处理查询


Using PHP and oci8 to handle a query

这是我以前遇到的一个数据库类的试卷问题。我只是在准备考试,所以可以把答案给别人。

考虑以下模式:

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'(但我认为情况并非如此)

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

编辑:只是一个想法:我觉得oci8和MySQL做的事情差不多,但是有理由更喜欢一个吗?我相信MySQL是更受欢迎的,但我的学校似乎更喜欢使用oci8作为考试问题

提前感谢!

尽管有"查找错误"answers"另一个错误发生":

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;
}