PHP PDO bağlantısı ile kullanıcı tanımlı MySQL fonksiyonu erişilebilir değil

1 Cevap php

Ben önemsiz bir MySQL fonksiyonu var:

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 ;

Ve bir PDO bağlantıyı kullanarak PHP bir sorguda denir:

$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());
}

Ancak, aşağıdaki raporları:

array
  0 => string '42000' (length=5)
  1 => int 1305
  2 => string 'FUNCTION CALC_IT does not exist' (length=37)

Eğer eski Mysql kodu ile deneyin ve eğer, bu işleri:

$db = mysql_connect('localhost', 'user', 'pass');
$result = mysql_query($query);
if (mysql_error()) {
    var_dump(mysql_error());
}

Başka mysql istemcisi ile çalışırsanız sorgusu da çalışır.

Yani why doesn't some kullanıcı MySQL fonksiyonları PHP'nin PDO kütüphanede çalışmak tanımlanan?

1 Cevap

new PDO ('mysql: host = localhost', 'kullanıcı', 'pass');

Dbname = Mydb Eksik?

öyle olacak mydb.CALC_IT

Evet, bu bir olasılık. Connect-zaman veri tabanı seçimi ziyade açıkça sorguda belirterek avantajları ve dezavantajları vardır. Sadece sunucu üzerinde tek bir veritabanı kullanıyorsanız eğer bağlantı zamanında bunu söylemek ve ardından olası erişim hakları hataları işlemek için kolay olma eğilimindedir, ancak çapraz db işi eğer açık bir şekilde "Mydb. CALC_IT "gerekli olacaktır.