-1

ストアド プロシージャを作成して実行しようとしている PHP クラスに関数がありますが、ストアド プロシージャに渡す変数を取得できないようです。, ,を手動で入力するdateStartdateEnduser_id期待どおりに実行されますが、変数をそれにバインドしようとしている場合はそうではありません (まっすぐな PHP 変数を使用しようとしても無駄でした):

 try {
      $sql = $conn->prepare("
           DROP PROCEDURE IF EXISTS datespopulate;
           DELIMITER |
           CREATE PROCEDURE datespopulate(dateStart DATE, dateEnd DATE, user_id)
           BEGIN
                WHILE dateStart <= dateEnd DO
                     INSERT INTO timesheet (DATE_YYYYMMDD, USER_ID) VALUES (dateStart, user_id);
                     SET dateStart = date_add(dateStart, INTERVAL 1 DAY);
                END WHILE;
           END;
           |
           DELIMITER ;
           CALL datespopulate(:startdate,:enddate,:user_id);
           ");
      $sql->execute(array(
           ':startdate'=> $startdate,
           ':enddate'=> $enddate,
           ':user_id'=> $userid));
 } catch(PDOException $e) {
      echo 'ERROR: ' . $e->getMessage(); }

代わりに試してみbindparamましたが、それもうまくいかなかったようです(私のやり方が間違っていたのでしょうか?)。ここで何が間違っていますか?

4

2 に答える 2

-2

この質問は、直接回答する場合は確実にトピック外であるため、デバッグ方法のヒントをいくつか示します。

  1. 手順を作成します。
  2. コンソールからテスト コールを発信する
  3. 「プロジェクトのコード全体」の一部ではなく、再現可能なテスト コードのみを含むテスト スクリプトを作成します。
  4. PHP からの生の値でテスト呼び出しを行う
  5. まったく同じテスト スクリプトで、エラー レポートを有効にして準備済みステートメント呼び出しを使用して PDO を追加します。
  6. 正確なコードと正確な出力の両方をここに投稿してください。

このようにして、少なくとも見知らぬ人があなたの質問に答えられるようにします。

于 2013-09-06T14:02:47.987 に答える