使用PHP和oci8来处理查询

时间:2013-05-09 19:35:43

标签: php oracle

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

考虑以下架构:

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来解答考试问题

提前致谢!

1 个答案:

答案 0 :(得分: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;

}