Wie rufe ich eine gespeicherte MySQL-Prozedur aus PHP-Code heraus auf?
Lesezeit: 2 Minuten
Gut
Ich habe eine gespeicherte Prozedur, die ich in MySQL erstellt habe, und möchte, dass PHP diese gespeicherte Prozedur aufruft. Was ist der beste Weg, dies zu tun?
DELIMITER $$
DROP FUNCTION IF EXISTS `getNodeName` $$
CREATE FUNCTION `getTreeNodeName`(`nid` int) RETURNS varchar(25) CHARSET utf8
BEGIN
DECLARE nodeName varchar(25);
SELECT name into nodeName FROM tree
WHERE id = nid;
RETURN nodeName;
END $$
DELIMITER ;
Wie lautet der PHP-Code zum Aufrufen der Prozedur getTreeNodeName?
Exemplarische Vorgehensweise zum Erstellen einer gespeicherten MySQL-Prozedur: stackoverflow.com/a/20433501/445131
– Eric Leschinski
6. Dezember 2013 um 21:25 Uhr
Gut
Ich habe jetzt eine Lösung gefunden, indem ich verwendet habe mysqli anstatt mysql.
<?php
// enable error reporting
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
//connect to database
$connection = mysqli_connect("hostname", "user", "password", "db", "port");
//run the store proc
$result = mysqli_query($connection, "CALL StoreProcName");
//loop the result set
while ($row = mysqli_fetch_array($result)){
echo $row[0] . " - " . + $row[1];
}
Ich habe festgestellt, dass viele Leute ein Problem mit der Verwendung haben mysql_connect, mysql_query and mysql_fetch_array.
Viele Leute machen Fehler, weil sie sich nicht die Mühe machen, dies zu überprüfen if ($connection instanceof mysqli) { }gleich wie if ($arr[0]=='forget checking') { }; ohne zu haben if (is_array($arr) && isset($arr[0]) && $arr[0]=='forget_checking') { }
– ajreal
12. November 2010 um 5:44 Uhr
mysqli_connect würde bei mir ohne eine or die-Anweisung am Ende nicht funktionieren: $connection = mysqli_connect(“hostname”, “user”, “password”, “db”, “port”)or die(“Error ” . mysqli_error($ Verbindung));
– Praesagus
7. November 2014 um 1:34 Uhr
Die mysql-Erweiterung ist deprecated und wird in Zukunft entfernt
– Dhiraj Thakur
13. September 2017 um 11:38 Uhr
phpadmin
Sie können eine gespeicherte Prozedur mit der folgenden Syntax aufrufen:
$result = mysql_query('CALL getNodeChildren(2)');
+1, weil es funktioniert hat, aber mysql_query hat für alle folgenden select-Anweisungen aufgehört zu arbeiten.
– Praesagus
7. November 2014 um 1:35 Uhr
Ich nehme an, dass Sie auch eine Variable wie diese hinzufügen können: $result = mysql_query(‘CALL getNodeChildren($a)’);
– Sboniso Marcus Nzimande
3. Dezember 2014 um 13:07 Uhr
Zahra
Das ist meine Lösung mit vorbereitete Erklärungen und die gespeicherte Prozedur gibt mehrere Zeilen zurück, nicht nur einen Wert.
Exemplarische Vorgehensweise zum Erstellen einer gespeicherten MySQL-Prozedur: stackoverflow.com/a/20433501/445131
– Eric Leschinski
6. Dezember 2013 um 21:25 Uhr