php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.09.2008, 14:43  
Benutzer
 
Registriert seit: 16.09.2008
Beiträge: 37
Horst79 befindet sich auf einem aufstrebenden Ast
Standard stored procedure, prepared statement wird nicht ausgeführt

Hi, ich wollte mich mal mit Stored Procedure/Prepared Statement befassen.
Ein paar Test waren auch erfolgreich aber jetzt hänge ich seit 2 Stunden an einen Problem fest. Hab eine Tabelle log2 die 2 Werte hat (prioritaet,message).
Mit einer Stored Procedure will ich jetzt einen Wert hinzufügen und dann die höchste id zurück bekommen.
Code:
CREATE  PROCEDURE addlog(iprioritaet INT(11), imessage VARCHAR(20), out op INT)
    SQL SECURITY INVOKER
BEGIN 
INSERT INTO log2 (message,prioritaet)VALUES (imessage ,iprioritaet);
SELECT MAX(prioritaet) into op from log2;
END
Innerhalb von MySQL klappts auch wenn ich:
Code:
call addlog (4,'test',@res);
select @res;
mache.

Aber wenn ich :
PHP-Code:
$strDbLocation 'mysql:dbname=t1;host=127.0.0.1';
$strDbUser 'root';
$strDbPassword '';
$objDb = new PDO($strDbLocation$strDbUser$strDbPassword);
$dbselect $objDb->prepare("call addlog(:prioritaet, :message, :prio2)");
$message "nachricht";
$prioritaet 7;
$dbselect->bindParam('message'$message);
$dbselect->bindParam('prioritaet'$prioritaet);
$dbselect->bindParam('prio2'$erg);
$dbselect->execute();
echo 
$erg 
macht PHP gar nichts: es gibt keinen eintrag in die Datenbank und es werden keine Fehler ausgegeben. Hat einer vielleicht eine idee wo der Fehler ist?
Horst79 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.09.2008, 14:46  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Warum willst du diese Prozedur überhaupt machen? sieht für mich ziehmlich überflüssig aus. belehre mich
cycap ist offline  
Alt 24.09.2008, 14:48  
Benutzer
 
Registriert seit: 16.09.2008
Beiträge: 37
Horst79 befindet sich auf einem aufstrebenden Ast
Standard

Ist halt ein Test. Aber wenn das klappt, will ich so mir die aktuelle id einer Tabelle zurück geben lassen wenn ein insert erfolgt ist.
Horst79 ist offline  
Alt 24.09.2008, 14:51  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Also ist das nur dazu da um die MySQL-Prozeduren Geschichte zu üben?
cycap ist offline  
Alt 24.09.2008, 14:53  
Benutzer
 
Registriert seit: 16.09.2008
Beiträge: 37
Horst79 befindet sich auf einem aufstrebenden Ast
Standard

MySQL Prozedur läuft ja aber die Umsetzung innerhalb von PHP nicht.
Horst79 ist offline  
Alt 24.09.2008, 15:11  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Meine Frage war mehr darauf bezogen ob du dir durch diese Prozedur irgendeinen Mehrwert erhoffst, außer Übung? Zu deinem eigentl. Problem kann ich nicht viel sagen, da ich nicht mit PDO arbeite.
cycap ist offline  
Alt 24.09.2008, 22:17  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Zitat von Horst79 Beitrag anzeigen
[/php]macht PHP gar nichts: es gibt keinen eintrag in die Datenbank und es werden keine Fehler ausgegeben. Hat einer vielleicht eine idee wo der Fehler ist?
gib mal bei bindParam noch den Parametertyp und die Rückgabegröße mit an mit an zb. PDO::PARAM_STR

PHP: Prepared Statements und Stored Procedures - Manual
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline  
Alt 24.09.2008, 23:04  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

hi,

machs bitte mal so (mit display_erros on):

PHP-Code:
try
{
    
error_reporting(E_ALL|E_STRICT);
    
$strDbLocation 'mysql:dbname=t1;host=127.0.0.1';
    
$strDbUser 'root';
    
$strDbPassword '';
    
$objDb = new PDO($strDbLocation$strDbUser$strDbPassword);
    
$objDb->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    
$dbselect $objDb->prepare("call addlog(:prioritaet, :message, :prio2)");
    
$message "nachricht";
    
$prioritaet 7;
    
$dbselect->bindParam('message'$message);
    
$dbselect->bindParam('prioritaet'$prioritaet);
    
$dbselect->bindParam('prio2'$erg);
    
$dbselect->execute();
    
print_r($dbselect->fetchAll()); 
}
catch(
PDOException $pdo_exception)
{
       echo 
$pdo_exception->getMessage();
       
var_dump($pdo_exception);

__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*

Geändert von brian johnson (24.09.2008 um 23:08 Uhr).
brian johnson ist offline  
Alt 26.09.2008, 10:29  
Benutzer
 
Registriert seit: 16.09.2008
Beiträge: 37
Horst79 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von brian johnson Beitrag anzeigen
hi,

machs bitte mal so (mit display_erros on):

PHP-Code:
try
{
    
error_reporting(E_ALL|E_STRICT);
    
$strDbLocation 'mysql:dbname=t1;host=127.0.0.1';
    
$strDbUser 'root';
    
$strDbPassword '';
    
$objDb = new PDO($strDbLocation$strDbUser$strDbPassword);
    
$objDb->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    
$dbselect $objDb->prepare("call addlog(:prioritaet, :message, :prio2)");
    
$message "nachricht";
    
$prioritaet 7;
    
$dbselect->bindParam('message'$message);
    
$dbselect->bindParam('prioritaet'$prioritaet);
    
$dbselect->bindParam('prio2'$erg);
    
$dbselect->execute();
    
print_r($dbselect->fetchAll()); 
}
catch(
PDOException $pdo_exception)
{
       echo 
$pdo_exception->getMessage();
       
var_dump($pdo_exception);

PHP-Code:
SQLSTATE[HY000]: General error1414 OUT or INOUT
argument 3 
for routine  t1.addlog is not 
a variable 
or NEW pseudo-variable in BEFORE  
triggerobject
(PDOException)#3 (7) { ["message:protected"]=> 
string(141)  "SQLSTATE[HY000]: General error: 
1414 OUT or INOUT argument 3 for routine  t1.addlog is not a variable 
or NEW pseudo-variable in BEFORE trigger"  
["string:private"]=> 
string(0"" ["code:protected"]=> 
string(5"HY000"  ["file:protected"]=> 
string(22"C:\xampp\htdocs\t3.php"  ["line:protected"]=> 
int(124) ["trace:private"]=> 
array(
1) { [0]=>
array(
6) { ["file"]=> 
string(22"C:\xampp\htdocs\t3.php" ["line"]=>  
int(124) ["function"]=> string(7"execute" ["class"]=> 
string(12)  "PDOStatement" ["type"]=> 
string(2"->" ["args"]=> 
array(
0) { } } }  ["errorInfo"]=> 
array(
3) { [0]=> 
string(5"HY000" [1]=> int(1414)  [2]=> 
string(104"OUT or INOUT argument 3 for routine t1.addlog is not
a  variable or NEW pseudo-variable in BEFORE trigger" 
} } 
Horst79 ist offline  
Alt 28.09.2008, 15:08  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

hi,

anscheinend unterstützt PDOStatement->prepare kein call.

MySQL Bugs: #21575: Stored Procedure with INOUT parm fails when called from PHP 5

du müsstest wohl mysql selbst benutzen:
MySQL :: MySQL 5.1 Reference Manual :: 12.7 SQL Syntax for Prepared Statements
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Stored Procedure - Invalid Format %d Rex Datenbanken 2 25.08.2006 10:13
CLOB als Rückgabewerte aus Oracle Stored Procedure PHP-Fortgeschrittene 1 31.01.2006 11:43

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
is not a variable or new pseudo-variable in before trigger, php4 prepared, pdo out or inout argument 5 for routine is not a variable or new pseudo-variable in before trigger, mysql error 1414, php prepared statements \select max\, prepared statements innerhalb von stored procedures, out or inout argument befor trigger, php mysql out or inout argument 1 for routine is not a variable or new pseudo-variable in before trigger, mysql procedure vs function, mysql stored procedure execute statement, pdo general error: 1414 out or inout argument 1, php pdo trigger prepared statement, out or inout argument 2 for routine is not a variable or new pseudo-variable in before trigger */, out or inout argument 2 for routine, php out or inout argument 2 for routine is not a variable or new pseudo-variable in before trigger, mysql stored procedures werden nicht ausgeführt, php is not a variable or new pseudo-variable in before trigger, \out or inout argument 5 for routine is not a variable or new pseudo-variable in before trigger\ }, mysql insert in prozedur funktioniert nicht, out or inout argument 2 for rout

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:01 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum