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 に答える