40 Stimmen

Wie ruft man eine MySQL-gespeicherte Prozedur aus dem PHP-Code heraus auf?

Ich habe eine gespeicherte Prozedur, die ich in MySQL erstellt habe und möchte, dass PHP diese gespeicherte Prozedur aufruft. Wie ist der beste Weg, dies zu tun?

- MySQL-Client-Version: 4.1.11
- MySQL-Server-Version: 5.0.45

Hier ist meine gespeicherte Prozedur:

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 ;

Was ist der PHP-Code, um die Prozedur getTreeNodeName aufzurufen?

0 Stimmen

Schritt-für-Schritt-Anleitung zur Erstellung einer MySQL-gespeicherten Prozedur: stackoverflow.com/a/20433501/445131

0 Stimmen

Das ist kein Verfahren (call procedurename), sondern eine Funktion (SELECT functioname(args))

55voto

Pheap Punkte 2309

Ich habe jetzt eine Lösung gefunden, indem ich mysqli anstelle von mysql verwende.

``

Ich habe festgestellt, dass viele Leute Probleme mit der Verwendung von mysql_connect, mysql_query und mysql_fetch_array haben.

``

1 Stimmen

Viele Menschen machen Fehler, weil sie nicht darauf achten zu überprüfen, ob if ($connection instanceof mysqli) { } ist, genauso wie if ($arr[0]=='check vergessen') { }; ohne if (is_array($arr) && isset($arr[0]) && $arr[0]=='check_vergessen') { } zu haben.

0 Stimmen

Mysqli_connect würde für mich nicht ohne eine or die Anweisung am Ende funktionieren: $verbindung = mysqli_connect("hostname", "benutzer", "passwort", "db", "port")or die("Fehler " . mysqli_error($verbindung));

1 Stimmen

Die mysql-Erweiterung ist veraltet und wird in Zukunft entfernt.

13voto

phpadmin Punkte 155

Sie können eine gespeicherte Prozedur mit der folgenden Syntax aufrufen:

$result = mysql_query('CALL getNodeChildren(2)');

1 Stimmen

+1, weil es funktioniert hat, jedoch mysql_query für alle nachfolgenden SELECT-Anweisungen nicht mehr funktioniert hat.

0 Stimmen

Ich gehe davon aus, dass Sie auch eine Variable hinzufügen können, wie folgt: $result = mysql_query('CALL getNodeChildren($a)');

4voto

Zahra Punkte 1796

Dies ist meine Lösung mit prepared statements und gespeicherte Prozedur gibt mehrere Zeilen zurück, nicht nur einen Wert.

set_charset('utf8');

$mIds = $_GET['ids'];

$stmt = $connection->prepare("CALL sp_takes_string_returns_table(?)");
$stmt->bind_param("s", $mIds);

$stmt->execute();

$result = $stmt->get_result();
$response = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($response);

$stmt->close();
$connection->close();

1voto

Petah Punkte 43997
result;
    }

0 Stimmen

Es funktioniert für die erste Frage, wenn die Stored Procedure nur einen Wert zurückgibt, aber der Code für die mehrfachen Ergebnisse funktioniert nicht. Irgendwelche Ideen?

0 Stimmen

@user480259, Ich habe den Ausschnitt, den ich dir gegeben habe, modifiziert, um Fehlerüberprüfung einzuschließen. Versuche das und sieh, was du bekommst.

0 Stimmen

Es sagte: "1305: FUNKTION getNodeChildren existiert nicht". Ich habe die Datenbank überprüft und sie existierte. Als ich sie ausgeführt habe, habe ich auch das Ergebnis erhalten. Es handelt sich jedoch um eine Prozedur und nicht um eine Funktion. Ist das wichtig?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X