php中mysql自定义函数,php – 创建自定义MySQL函数?

您在应用程序中声明此MySQL函数,它将保留在数据库中,直到重新启动数据库服务器.

mysql_query("CREATE FUNCTION Distance(LAT_A INT, LON_A INT, LAT_B INT, LON_B INT, )

RETURNS INT

READS SQL DATA

DETERMINISTIC

BEGIN

DECLARE radius, deltaLat, deltaLon, result, distance BIGINT;

SET radius=3956;

SET deltaLat=LAT_B-LAT_A;

SET deltaLon=LON_B-LON_A;

SET result=POW(SIN(deltaLat/2), 2) + (COS(LAT_A) * COS(LAT_B) * POW(SIN(deltaLon/2.0), 2));

SET distance=radius * 2 * ATAN2(SQRT(result), SQRT(1 - result));

RETURN distance;

END");

这使用MySQL的mathematical functions.将此处理卸载到数据库是快速有效的(数据不必通过网络传输,并且您只返回所需的结果).

一旦你宣布了这个,就可以这样使用它:

$query = "SELECT lat, lon FROM zipcodes WHERE Distance(lat, lon, 0, 0) < 20";

mysql_query($query);

但是,如果数据库重新启动,则先前声明的任何函数或过程都将丢失.可以在应用程序级别正常处理MySQL错误1305(函数functionName不存在).

在您的数据库错误处理程序

switch (mysql_errno()):

case 1305:

if (false === $database->_declareStoredProcedureFlag) {

if ($c = preg_match_all("/FUNCTION [a-zA-Z0-9]+\." .

"([a-zA-Z0-9_]*) does not exist/is",

mysql_error(), $matches)

) {

$storedFunctionName = $matches[1][0];

$database->_declareStoredProcedureFlag = true;

if (true === $database->declareStoredFunction($storedFunctionName)) {

$result = mysql_query($query);

}

}

}

break;

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值