在php中创建用户定义的mysql函数

时间:2012-02-07 19:14:46

标签: php mysql function

我有这个问题,我在php中创建了一个用户定义的函数。但它有一些问题。让我详细说明。 假设我已经创建了这个功能

<?php

include 'db_connect.php';
$sql="DROP FUNCTION IF EXISTS testf";
$result=mysql_query($sql) or die (mysql_error());
$sql="CREATE  FUNCTION testf() RETURNS text
DETERMINISTIC
READS SQL DATA

BEGIN
DECLARE Output text;

set Output='zzz';

RETURN output ;
END";

$result=mysql_query($sql) or die (mysql_error());

$sql="SELECT testf()";
$result=mysql_query($sql) or die (mysql_error());
$row=mysql_fetch_array($result);
echo nl2br($row[0]);

?>

以上工作正常。

但以下内容有误:

<?php
include 'db_connect.php';
$sql="DROP FUNCTION IF EXISTS testf";
$result=mysql_query($sql) or die (mysql_error());
$sql="CREATE  FUNCTION testf() RETURNS text
DETERMINISTIC
READS SQL DATA

BEGIN
DECLARE Output text;
DECLARE name text;
set Output='zzz';
set name='SELECT t_name for tbl_names where id=1';  
RETURN output ;
END";

$result=mysql_query($sql) or die (mysql_error());

$sql="SELECT testf()";
$result=mysql_query($sql) or die (mysql_error());
$row=mysql_fetch_array($result);
echo nl2br($row[0]);
?>

我收到此错误:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在'SELECT t_Name FROM tbl_name WHERE id = 1附近使用正确的语法;返回输出;在第9行结束 任何人都可以提出解决方案吗?我被卡住了。 我知道我可以执行查询'SELECT t_name for tbl_names where id = 1'并将结果作为参数传递。它会工作是的,但我想避免它。

2 个答案:

答案 0 :(得分:2)

mysql_query一次只允许一个查询。鉴于此限制,您无法使用它定义任何最简单的存储过程。

你通常不应该使用mysql扩展 - 它很古老,而且是为那些甚至没有存储过程之类的MySQL版本而制作的。为什么它仍然存在超出我的范围。

无论如何,你可以使用mysqli扩展;甚至有an example in the docs。如果你对此感觉更舒服,它可以与旧的程序方式非常相似地使用。

答案 1 :(得分:0)

您需要在创建函数之前更改分隔符,并使用“新”分隔符来分隔函数定义。然后,在完成函数定义后,将分隔符更改回;