Announcement

Collapse
No announcement yet.

mysqli und prozeduren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • mysqli und prozeduren

    hi,

    ich bin am verzweifeln. Ich komme einfach nicht weiter, habe im meinen Projekt nun alles auf Mysqli umgestellt, damit ich Prozeduren aufrufen kann, was ja im normal mysql nicht möglich ist.

    Nun habe ich folgenden Fall:

    Im ersten Query rufe ich eine Prozedur auf. <- Funktioniert

    Im zweiten Query rufe ich eine normales Select auf <- Funktioniert nicht.

    Schiebe ich nun das zweite Query vor das erste, geht beides.

    Das heisst irgendwas blockiert sämtliche weiteren Querys nachdem ich eine Prozedur aufgerufen habe. Anscheinend läuft irgendein Puffer voll oder ähnliches.

    ich hoffe ihr könnt mir helfen.

    Vielen Dank!

  • #2
    schade hat keiner eine idee dazu? das lustige ist, wenn ich die datenbankverbindung nach dem ersten query trenne, und neu verbinde, geht das zweite query wieder

    Comment


    • #3
      Zeig doch mal etwas Quellcode bzw. Infos mit was du auf die DB zugreifst. Ansonsten ist das (passend zum Wetter) stochern im Nebel.

      Comment


      • #4
        Hallo Richie1985,
        Originally posted by Richie1985 View Post
        ...ich komme einfach nicht weiter, habe im meinen Projekt nun alles auf Mysqli umgestellt, damit ich Prozeduren aufrufen kann, was ja im normal mysql nicht möglich ist.
        Also MySQL unterstützt ab Version 5.0 standardmäßig Stored Routines. Und was ist überhaupt Mysqli ? Kann es sein das du hier ein bissel was durcheinanderbringst und eigentlich die PHP-Klasse Mysqli meinst? Wenn ja, warum fragst du dann nicht im PHP-Forum?

        Originally posted by Richie1985 View Post
        ...Im ersten Query rufe ich eine Prozedur auf. <- Funktioniert

        Im zweiten Query rufe ich eine normales Select auf <- Funktioniert nicht.
        "Funktioniert nicht" ist IMMER eine sehr "aussagekräftige" Fehlerbeschreibung! Damit kann jeder sofort was anfangen und auf den Punkt genau sagen woran es liegt. <sarkasmus aus>

        Gruß Falk

        P.S.: Bevor du rumheulst wenn dir über Nacht keiner antwortet, solltest du an deinen Fragestellungen arbeiten!
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          jepp ihr habt ja recht, also es ist natürlich die php mysqli klasse, die ich da verwende.

          hier ein auszug aus meinem quellcode:

          PHP Code:
          $sql_loc " SELECT stunde,
                  MINUTE , empfangen, beantwortet
                  FROM `calls_ist`
                  WHERE iddienst ="
          .$iddienst."
                  AND datum = '"
          .$datum."'
                  AND standortid = 0
                  ORDER BY stunde,minute"
          ;
          $sql_check "call ".MYSQL_DBNAME.".mysqlOderOracle_Calls(STR_TO_DATE('".$datum."', '%d.%m.%Y'),".$standortid.",".$line.",".$iddienst.",'calls',".$ajax_intervall.",".$reloaddiff.",'".$_SESSION['user_nickname']."')";
              
          $rs_check =mysqli_query($GLOBALS["db"],$sql_check); 
              
          $row_check mysqli_fetch_array($rs_check);
              
          $action $row_check['_action'];
              echo 
          $row_check['_action'];
              switch(
          $action){
                  case 
          'mysql'
                      
          $oracle_images "<img src=images/Green_left.png />".$oracle_images;
                      
          $rs mysqli_query($GLOBALS["db"],$sql_loc);
                      if(
          mysqli_num_rows($rs)<>0){
                          
          $empfangen = array();
                          
          $beantwortet = array();
                          while(
          $results=mysqli_fetch_array($rs)){
                              
          $empfangen[]=array($results[0],$results[1],$results[2]);
                              
          $beantwortet[]=array($results[0],$results[1],$results[3]);
                          }
                      }
                      break;
                  case 
          'oracle'
                      
          $oracle_images "<img src=images/Red_left.png />".$oracle_images;
                      include_once(
          "datahandler/oracle.php");
                      
          $ociParse oci_parse($db_ora$sql_ora);
                      if (!
          $ociParse) {
                          echo 
          "Error in parse. Error was :"oci_error($db_ora);
                      } else { 
          Nun bekomme ich in der zweiten Abfrage in Switch Case Zwei "mysql" keine Daten mehr geliefert. Setze ich diese Abfrage ganz nach oben, also über den Aufruf der Prozedur, bekomme ich Daten. Fehlermeldungen gibt es keine, ausser das in der anweisung mysqli_num_rows($rs) %rs keine brauchbares recordset ist.

          Hier der Quellcode der Prozedur:

          PHP Code:
          use `supervisor`;
          drop procedure if exists `mysqlOderOracle_Calls`;
          delimiter $$
          create definer=`root`@`localhost`
          procedure `mysqlOderOracle_Calls`(
              
          in _datum date,
              
          in _standortId integer(10unsigned,
              
          in _lineId integer(10unsigned,
              
          in _idDienst integer(10unsigned,
              
          in _typ enum('boerse','calls','reload'),
              
          in _maxDiff integer(10unsigned,
              
          in _reloaddiff integer(10unsigned,
              
          in _user varchar(50)
          )
          modifies sql data
          sql security definer
          l_proc
          :begin
              
          declare _action varchar(6);
              if (`
          darfUserLineSehen`(_lineId_user) != 1then
                  select 
          'nix';
                  
          leave l_proc;
              
          end if;
              
          start transaction;
              if (
                  
          select time_to_sec(timediff(date_format(now(), '%H:%i:%S'),
          max(`zeit`))) < _maxDiff
                  from 
          `oracle_log`
                  
          where
                      
          `datum` = _datum and
                      `
          standortid` = _standortId and
                      `
          lineid` = _lineId and
                      `
          typ` = _typ
              
          then
                  set _action 
          := 'mysql';
              else
                  if (
                      
          select
                          time_to_sec
          (
                              
          timediff(
                                  
          date_format(now(), '%H:%i:%S'),
                                  
          maketime(stunde,minute,00)
                              )
                          ) < 
          _reloaddiff 60
                      from 
          `calls_ist`
                      
          where
                          
          `iddienst` = _idDienst and
                          `
          datum` = _datum and
                          `
          standortid` = _standortId and
                          `
          index` = (Select max(`index`) FROM `calls_ist`
                                      
          WHERE 
                                          
          `iddienst` = _idDienst and
                                          `
          datum` = _datum and 
                                          `
          standortid` = _standortId)
                 ) 
          then
                      set _action 
          := 'mysql';
                 else
                      
          insert into `oracle_log` (
                          `
          datum`,
                          `
          zeit`,
                          `
          user`,
                          `
          lineid`,
                          `
          standortid`,
                          `
          typ`
                      )
                      
          values (
                          
          now(),
                          
          now(),
                          
          _user,
                          
          _lineId,
                          
          _standortId,
                          
          _typ
                      
          );
                      
          set _action := 'oracle';
                 
          end if;
             
          end if;
             
          commit;
             
          select _action;
          end
          $$
          delimiter 
          Vielleicht sagt euch das mehr.

          Ja eigentlich ist es eine Sache für das PHP Forum, ich dachte aber, vielleicht liegt es irgendwie an der Prozedur?
          Zuletzt editiert von Richie1985; 14.11.2008, 11:59. Reason: $sql_loc mit eingefügt

          Comment


          • #6
            Hallo,

            also in deinem Quellcode-Auszug ist $sql_loc in $rs = mysqli_query($GLOBALS["db"],$sql_loc); "undefined".

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Originally posted by Falk Prüfer View Post
              Hallo,

              also in deinem Quellcode-Auszug ist $sql_loc in $rs = mysqli_query($GLOBALS["db"],$sql_loc); "undefined".

              Gruß Falk
              doch doch ist definiert, hatte ioch jetzt nur nicht mit hier rein kopiert, nun habe ich $sql_loc noch im obigen thread eingefügt.

              Comment


              • #8
                hi, weiss keiner einen rat? dann muss ich wohl doch alles auf pdo umstellen

                Comment


                • #9
                  Lösung

                  falls irgendwann mal jemand über dieses thread stolpern sollte, die lösung des problems ist mysqli_multi_query(). Damit ist es möglich.


                  Gruss!

                  Comment

                  Working...
                  X