这是我以前遇到的一个数据库类的试卷问题。我只是在准备考试,所以可以把答案给别人。
考虑以下模式:
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;
}