Eredmény: 1 - 10 (10) összesen

Téma: Mysql call function()

  1. #1
    Új tag
    Csatlakozott
    10-03-31
    Hozzászólás
    7
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás Mysql call function()

    Sziasztok.
    Mysql call function() -t kell php-ből lefuttatnom.
    Ez el is készült, de folyamatosan hibára futok.
    Ha pl: mysql query browser-ben futtatom le a kérést, hibátlanul lefut, de php-ből folyamatosan hiba van:
    Kód:
    HTML kód:
    $link = mysqli_connect(
    'localhost', 
    'user', 
    'passwd',
    'db');
    if (!$link) {
    printf("Can't connect to MySQL Server. Errorcode: %s\n", mysqli_connect_error());
    exit;
    }
    $result = mysqli_query($link, "call function ('valami','valami2')");
    $row = mysqli_fetch_array($result);
    echo ($row[0] . "<br>");
    mysqli_free_result($result);
    mysqli_close($link);
    Hibaüzenet:
    HTML kód:
    Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /home/ereg/wwwpub/link/atlink.php  on line 58
    Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, boolean given in /home/ereg/wwwpub/link/atlink.php on line 62
    Hol hibáztam??



  2. #2
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás re: Mysql call function()

    Idézet Laci72 eredeti hozzászólása Hozzászólás megtekintése
    Sziasztok.
    Mysql call function() -t kell php-ből lefuttatnom.
    Ez el is készült, de folyamatosan hibára futok.
    Ha pl: mysql query browser-ben futtatom le a kérést, hibátlanul lefut, de php-ből folyamatosan hiba van:
    Kód:
    HTML kód:
    $link = mysqli_connect(
    'localhost', 
    'user', 
    'passwd',
    'db');
    if (!$link) {
    printf("Can't connect to MySQL Server. Errorcode: %s\n", mysqli_connect_error());
    exit;
    }
    $result = mysqli_query($link, "call function ('valami','valami2')");
    $row = mysqli_fetch_array($result);
    echo ($row[0] . "<br>");
    mysqli_free_result($result);
    mysqli_close($link);
    Hibaüzenet:
    HTML kód:
    Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /home/ereg/wwwpub/link/atlink.php  on line 58
    Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, boolean given in /home/ereg/wwwpub/link/atlink.php on line 62
    Hol hibáztam??
    szerintem olyan nincs, hogy call function ('valami', 'valami2');
    olyan esetleg van, hogy call_function(), bár még nem használtam, de biztos, hogy nem space van a 2 szó között. A hibaüzenetnek az a lényege, hogy nem fut le a query-d ilyenkor FALSE a visszatérési éréke és ezért nem jó utána a 2 függvény, ami a hibát dobja. Milyen függvényt akarsz futtatni mysql-ből? Miért kell a $link a query-be?


    // Only illogics can find
    // hidden flaws in a straight logic line

  3. #3
    Rubyist Geri logója
    Csatlakozott
    07-12-15
    Hely
    \x90
    Hozzászólás
    5.744
    Begyűjtött 1.428 köszönetet
    892 hozzászólásával

    Alapbeállítás re: Mysql call function()

    @Laci72

    Kód:
    SELECT fuggvenyneve(parameterek);
    előtte create function -el hozd létre a függvényt


    Utoljára módosítva: Geri által : 2010-04-02 14:27

  4. #4
    Új tag
    Csatlakozott
    10-03-31
    Hozzászólás
    7
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Mysql call function()

    Sziasztok.
    A függvényt már létrehoztam Mysql Query Browser-el, és ott hibátlanul lefut.
    Mivel két egymásba ágyazott függvényt kellene futtatni, php-ben nem akar lefutni.
    A függvény lényege, hogy egy hosszú linket (valami2), kicserél egy rövid linkre (valami1), és generál egy véletlen számot, elmenti egy táblában, a hószzú link-el együtt. A rövid linkre kattintva a táblából kiveszi a hosszú linket és arra irányitja a látogatót - igy neki nem kell a méter hosszú link-el bajlodnia.
    Valahol hibázok, de nem tudok rájönni hogy hol.
    HTML kód:
    $mysqli = new mysqli("localhost", "xy", "xy", "xy");
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    $query="call function('valami1','valami2')";
    if ($mysqli->multi_query($query)) {
        do {
            if ($result = $mysqli->store_result()) {
                while ($row = $result->fetch_row()) {
                    printf("%s\n", $row[0]);
                }
                $result->free();
            }
            if ($mysqli->more_results()) {
                printf("%s\n", $row[1]);
            }
        } while ($mysqli->next_result());
    }
    $mysqli->close();




  5. #5
    Rubyist Geri logója
    Csatlakozott
    07-12-15
    Hely
    \x90
    Hozzászólás
    5.744
    Begyűjtött 1.428 köszönetet
    892 hozzászólásával

    Alapbeállítás re: Mysql call function()

    Idézet Laci72 eredeti hozzászólása Hozzászólás megtekintése
    Sziasztok.

    Valahol hibázok, de nem tudok rájönni hogy hol.
    leírom akkor mégegyszer: fuggvenyneve() így hívod meg a függvényt, nem kell a call function.
    Kód:
    $query = "select valami1() as egy,valami2() as ketto";
    így a $row['egy'] és $row['ketto'] ben lesznek a függvények kimenetei.


    If debugging is the process of removing software bugs, then programming must be the process of putting them in.
    Ruby blog
    Give a man a fish and you feed him for a day. Teach a man to fish and you feed him for a lifetime.
    Respect all, fear none

  6. #6
    Új tag
    Csatlakozott
    10-03-31
    Hozzászólás
    7
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Mysql call function()

    Bocs, ezek szerint megint rosszul írtam valamit, mert félreértettél.
    a MYsql Query Browser-ben elkészített függvényem igy néz ki:
    HTML kód:
    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS valami$$
    CREATE PROCEDURE valami( in p_url1 varchar(10000), in p_url2 varchar(10000) )
    begin
      declare s_ret varchar(20000) ;
      declare s_lid char(50) ;
      set s_lid = '' ;
      call valami2( p_url2, @s_lid ) ;
      set s_lid = @s_lid ;
      set s_ret = concat( p_url1, s_lid );
      select s_ret ;
    end $$
    DELIMITER ;
    Tehát én e php-ban csak egy függvényt hivok meg két paraméterrel:
    HTML kód:
    $query="call valami('paraméter1','paraméter2')";
    És a függvény végén generált s_ret-re lenne szükségem.
    Ha mysql browserben lefuttatom a függvényt és legenerálja az s_ret-et, és utánna futtatom php-val akkor megvan az eredmény, de ha csak php-val futtatom akkor nincs hibaüzenet, de eredmény sem.



  7. #7
    Rubyist Geri logója
    Csatlakozott
    07-12-15
    Hely
    \x90
    Hozzászólás
    5.744
    Begyűjtött 1.428 köszönetet
    892 hozzászólásával

    Alapbeállítás re: Mysql call function()

    Idézet Laci72 eredeti hozzászólása Hozzászólás megtekintése
    Bocs, ezek szerint megint rosszul írtam valamit, mert félreértettél.
    a MYsql Query Browser-ben elkészített függvényem igy néz ki:

    És a függvény végén generált s_ret-re lenne szükségem.
    Ha mysql browserben lefuttatom a függvényt és legenerálja az s_ret-et, és utánna futtatom php-val akkor megvan az eredmény, de ha csak php-val futtatom akkor nincs hibaüzenet, de eredmény sem.
    Kód:
    begin
      declare s_ret varchar(20000) ;
      declare s_lid char(50) ;
      set s_lid = '' ;
      call valami2( p_url2, @s_lid ) ;
      set s_lid = @s_lid ;
      set s_ret = concat( p_url1, s_lid );  
      return s_ret;
    end $$
    nem tér vissza a függvényed semmivel, ezért nincs eredmény. a fenti módosítás megoldja, de nem próbáltam ki.

    ja és a query szerintem így jó:
    Kód:
    $query="select valami('paraméter1','paraméter2')";



    Utoljára módosítva: Geri által : 2010-04-07 17:05

  8. #8
    Új tag
    Csatlakozott
    10-03-31
    Hozzászólás
    7
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Mysql call function()

    A query-d teljesen jó, nem is azzal van gond.
    A return sajnos nem oldotta meg a problémát.
    Az, hogy nem tér vissza az s_ret-el csak a másodlagos gond - az elsődleges, hogy nem is hozza létre az s_ret-et a megfelelő táblába.
    a valami2 függvény:
    HTML kód:
    DELIMITER $$
    DROP PROCEDURE IF EXISTS valami2 $$
    CREATE PROCEDURE valami2( in p_url varchar(10000), out p_lid char(50) )
    begin
      declare s_lid char(50) ;
      declare s_kodtid char(20) ;
      declare s_vtid char(20) ;
      declare s_idid char(1) ;
      declare s_stid char(1) ;
      declare i_db int ;
      set p_lid = '?URL_LID';
      set s_lid = '';
      set s_kodtid = 'XVIDNK';
      set s_vtid = 'NK' ;
      set s_idid = 'X' ;
      set s_stid = 'S' ;
      select count(1) into i_db
        from link where url = p_url and aktiv = '1' ;
      if i_db > 0 then
        select lid into s_lid
          from link where url = p_url and aktiv = '1'
        order by datum0 desc
        limit 1 ;
        set p_lid = s_lid ;
      else
        set s_lid = next_vid( s_idid, s_vtid, s_stid ) ;
        if ifnull( s_lid, '' ) <> '' then
          insert link ( lid, url, aktiv ) values ( s_lid, p_url, '1' ) ;
          set p_lid = s_lid ;
        end if ;
      end if ;
    end $$
    DELIMITER ;
    Sztem pofon egyszerű lesz a megoldás, általában az ilyennel szokott az ember órákat küszködni.



  9. #9
    Új tag
    Csatlakozott
    10-03-31
    Hozzászólás
    7
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Mysql call function()

    Senkinek semmi ötlete??



  10. #10
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás re: Mysql call function()

    Idézet Laci72 eredeti hozzászólása Hozzászólás megtekintése
    Senkinek semmi ötlete??
    Sajnos storprocokhoz (még) nem értek, nem használtam őket soha.



A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •