ich eine triviale MySQL-Funktion habe:Benutzerdefinierte MySQL-Funktion nicht zugänglich mit PHP PDO Verbindung
DELIMITER $$
DROP FUNCTION IF EXISTS `mydb`.`CALC` $$
CREATE FUNCTION `mydb`.`CALC_IT`(Flag VARCHAR(1), One FLOAT, Other FLOAT)
RETURNS FLOAT
BEGIN
IF One IS NULL THEN RETURN 0; END IF;
IF Other IS NULL THEN RETURN 0; END IF;
IF Flag = 'Y' THEN
RETURN Other - One;
ELSE
RETURN Other
END IF;
END $$
DELIMITER ;
Und es ist in einer Abfrage von PHP mit einer PDO-Verbindung genannt:
$query = 'SELECT CALC_IT(`Flag`, `One`, `Two`) FROM `mydb`.`table` WHERE `Condition` = 1';
$db = new PDO('mysql:host=localhost', 'user', 'pass');
$stmt = $db->prepare($query);
if (!$stmt->execute()) {
var_dump($stmt->errorInfo());
}
Aber es gibt die folgende:
array
0 => string '42000' (length=5)
1 => int 1305
2 => string 'FUNCTION CALC_IT does not exist' (length=37)
Und, wenn Sie es mit dem Erbe Mysql Code versuchen, es funktioniert:
$db = mysql_connect('localhost', 'user', 'pass');
$result = mysql_query($query);
if (mysql_error()) {
var_dump(mysql_error());
}
Die Abfrage funktioniert auch, wenn Sie es mit einem anderen mysql-Client versuchen.
Also warum nicht einige benutzerdefinierte MySQL-Funktionen arbeiten in PHP-PDO-Bibliothek?
Mmmm, ok. Sieht so aus, als müssten Sie direkt auf die Funktion verweisen, wenn Sie sie über PDO aufrufen, also wird es mydb.CALC_IT. Bitte aktualisieren Sie Ihre Antwort, und ich werde es akzeptieren! – Jrgns