Ich hatte ein Problem mit dem Aufruf von MySQL Prozeduren aus PHP heraus. Ich versuchte dies über die MySQLI Schnittstelle. Dies funktionierte nicht. Auf Anraten von "protestix" bin ich auf PDO umgestiegen. Die angestoßenen Prozeduren laufen jetzt ohne Abbruch und Fehlermeldung durch. Leider gibt es dennoch ein Problem. Sie laufen ohne den Datumsparameter den ich übergeben möchte. Es geht darum, aus der Datenbank bestimmte Situationen, die zu einem bestimmten Datum vorhanden waren nachzustellen. Daher muss ich beliebige Datumswerte der Prozedur mitteilen können. Beim Googlen habe ich Beispiele gefunden, die bei mir leider nicht funktionierten. HIer nun die Codeschnipsel.
Auszug aus dem PHP Skript:
MySQL Prozedure die aufgerufen wird.
Im Logging (Table: logging_p_ansicht_erstellen) bleibt das Datumsfeld leer. Sonst läuft die Prozedur durch und ruft auch die Unterprozeduren erfolgreich auf. Bereits in der obersten Schicht (Prozedur die von PHP aufgerufen wird) geht allerdings der Datumsparameter verlohren. In den error.log Dateien von apache2 und mysql stehen keine Einträge. Was läuft falsch?
Auszug aus dem PHP Skript:
PHP-Code:
.....
try
{
set_time_limit(0);
ignore_user_abort(1);
$sdatum=$_POST['sdatum'];
echo "Datum=",$sdatum,"<br>";
#
# Datenbankverbindung vorbereiten
#
$host='localhost';
$dbname='finanzdepot';
$username='www-data';
$password='XXXXXXXXXX';
$dsn = "mysql:host=".$host.";dbname=".$dbname;
#
# Datenbankverbindung aufbauen
#
$link = new PDO($dsn, $username, $password,array(PDO::ATTR_PERSISTENT => true));
#
# SQL Befehl vorbereiten und absetzen
#
$statement=$link->prepare('CALL p_ansicht_erstellen(:qDatum);');
$statement->bindParam(':qDatum' ,$sdatum, PDO::PARAM_STR, 10);
if(!$statement -> execute())
{
echo "SQL Error <br />";
echo $statement->queryString."<br />";
echo $statement->errorInfo()[2];
}
# Datenbankverbindung schließen
$link = null;
}
catch (PDOException $e)
{
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
......
Code:
drop procedure if exists p_ansicht_erstellen; delimiter // create procedure p_ansicht_erstellen(qDatum date) /* Erstellen der temporaeren Tabellen für das Formular "ausgabe-saldo" */ BEGIN # DROP TABLE IF EXISTS `logging_p_ansicht_erstellen`; CREATE TABLE `logging_p_ansicht_erstellen` (log text); # #SET @qaDatum=@qDatum; set @qaDatum=@qDatum; SELECT @qaDatum; INSERT INTO logging_p_ansicht_erstellen (log) VALUES (@qaDatum); # Logging SET @Flag1="p_aktuelle_kurse_kopieren"; INSERT INTO logging_p_ansicht_erstellen (log) VALUES (@Flag1); # Logging CALL p_aktuelle_kurse_kopieren(@qaDatum); SET @Flag2="p_ausgabe_saldo"; INSERT INTO logging_p_ansicht_erstellen (log) VALUES (@Flag2); # Logging CALL p_ausgabe_saldo(@qaDatum); CALL p_ausgabe_bestand; CALL p_ausgabe_verkaeufe; CALL p_ausgabe_minimalkurs_verkauf; CALL p_ausgabe_maximalkurs_kauf; END //
Kommentar