RelaXx: mysql create function

hallo ich habe eigentlich ein mysql problem aber dazu gibt es leider keinen Themenbereich.

ich schaff es nich eine mysql function zu erstellen.

  
$db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);  
  
// Nutzen von Datenbank - Name ist hinterlegt in  
// Konstante MYSQL_DATENBANK  
$db_sel = mysql_select_db( MYSQL_DATENBANK )  
   or die("Auswahl der Datenbank fehlgeschlagen");  
$sql ='  
delimiter |  
create function test ()  
begin  
SELECT * FROM `t3gametest`;  
end|  
  
  
';  
  
  
echo '<pre>';  
echo $sql;  
  
$db_erg = mysql_query( $sql );  
if ( ! $db_erg )  
{  
  die('Ung&uuml;ltige Abfrage: ' . mysql_error());  
echo $db_erg;  
  
}  
echo '</pre>';  

ich bekomm nur eine syntaxfehlermeldung
und weis nicht warum.

schon mal danke im vorraus für eure Hilfe

  1. Hi!

    ich schaff es nich eine mysql function zu erstellen.

    Das geht nur mit der mysqli-Extension, denn die kennt mysqli_multi_query().

    Lo!

    1. Danke für die schnelle hilfe aber auch mysqli gibt mir eine fehlermeldung aus

        
      $mysqli = new mysqli(MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT, MYSQL_DATENBANK);  
        
      /* check connection */  
      if (mysqli_connect_errno()) {  
          printf("Connect failed: %s\n", mysqli_connect_error());  
          exit();  
      }  
        
      $query  ='  
      delimiter //  
      create function test ()  
      begin  
      SELECT * FROM `t3gametest`;  
      end;//  
      delimiter ;  
      ';  
        
      //$query  ='Select test ();';  
        
      if (!$mysqli->query($query)) {  
          printf("Errormessage: %s\n", $mysqli->error);  
      }  
        
        
        
              /* store first result set */  
              if ($result = $mysqli->use_result()) {  
                  while ($row = $result->fetch_row()) {  
                      printf("%s\n", $row[0]);  
                  }  
                  $result->close();  
              }  
        
        
      /* close connection */  
      $mysqli->close();  
      
      

      was ist beim erstellen der function noch falsch?

      mfg RelaXx

      1. Hi!

        Danke für die schnelle hilfe aber auch mysqli gibt mir eine fehlermeldung aus

        Übrigens, es geht doch mit der mysql-Extension.
        Du machst aber andere Fehler:

        • Das DELIMITER-Zeug braucht man nur an der Konsole. Von PHP aus lässt man das abschließende Semikolon nach dem END wie bei jedem Statement weg.
        • Du sagst nicht, welche Fehlermeldung kommt.

        create function test ()
        begin

        • Das ist ungültige Syntax für eine Function. Da fehlt nämlich die RETURNS-Klausel.
        • Eine Function gibt genau einen Wert zurück und keine Ergebnismenge. Procedures können Ergebnismengen zurückgeben.

        Lo!

        1. ich hab jetzt eine procedure verwendet:

            
          <?php  
          error_reporting(E_ALL);  
            
          $mysqli = new mysqli(MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT, MYSQL_DATENBANK);  
            
          /* check connection */  
          if (mysqli_connect_errno()) {  
              printf("Connect failed: %s\n", mysqli_connect_error());  
              exit();  
          }  
          $query  ='  
            
          create procedure testo ()  
          begin  
          SELECT * FROM `t3gametest`;  
          end  
            
          ';  
          if (!$mysqli->query($query)) {  
              printf("Errormessage: %s\n", $mysqli->error);  
            }  
          ?>  
            
          
          

          ich bekomme die Fehlermeldung :

          Errormessage: Access denied for user 'lrelaxxl_test'@'localhost' to database 'lrelaxxl_test'

          wenn ich das "delimiter//"so einbaue

          $query  ='  
          delimiter //  
          create procedure testo ()  
          begin  
          SELECT * FROM `t3gametest`;  
          end;//  
          delimiter ;  
          ';
          

          bekomm ich eine syntaxfehlermeldung:

          Errormessage: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimiter // create procedure testo () begin SELECT * FROM t3gametest; end;// ' at line 1

          vielen dank nochmals für die hilfe

          mfg RelaXx

          1. Hi!

            ich bekomme die Fehlermeldung :
            Errormessage: Access denied for user 'lrelaxxl_test'@'localhost' to database 'lrelaxxl_test'

            Dann sorge für die entsprechenden Rechte (CREATE ROUTINE wird benötigt). Durch Änderung der Syntax bekommst du sie jedenfalls nicht.

            Lo!

  2. ich bekomm nur eine syntaxfehlermeldung

    Es ist ja schon schön, dass du geschrieben hast, um welche Fehlerart es sich handelt und obendrein auch den Code mitgeliefert hast – viele andere sind nicht in der Lage, über ein nichtssagendes "funzt nicht" hinauszukommen, und erwarten, dass Mama Forum ihnen daraufhin alles aus der Nase zieht.

    Trotzdem: Falls du nicht darauf warten möchtest, dass irgendwer vor lauter Langeweile deinen Code in ein eigenes Skript einbaut, um herauszufinden, wo ungefähr in den drei Dutzend Zeilen ein Fehler sein könnte, solltest es du denjenigen, von denen du Hilfe möchtest, sehr viel einfacher machen und die Positionsangabe verraten, die bei der Fehlermeldung garantiert dabei war.

    Davon unabhängig:
    Auch mysql_connect() und mysql_select_db() können Fehler liefern. Letzteren fragst du zwar ab, kümmerst dich aber nicht um die Erklärung aus mysql_error(). Bei mysql_connect() machst du gar nichts.
    Baue beides so, wie du es bei mysql_query() schon richtig gemacht hast.

    Weiterhin solltest du den Fehler, den mysql_error() liefert, zumindest auf öffentlichen Systemen nicht in die Webseite ausgeben, sondern mittels error_log() ins Fehlerprotokoll des Servers schreiben.
    Erstens kannst du Fehler, die bei Besuchern deiner Seiten passieren, nicht sehen, wenn du sie nicht protokollierst (und erwarte nicht, dass sich irgendwer darum kümmert, dir eine Meldung zu schicken). Zweitens gehen solche Interna da draußen niemanden etwas an.

  3. hallo ich habe eigentlich ein mysql problem aber dazu gibt es leider keinen Themenbereich.

    schon mal danke im vorraus für eure Hilfe

    hallo ,selfphp-Forum ist auch eine gute Adresse
    mffg