2012-02-07 23 views
1

私はこの問題を抱えているので、私はPHP内でユーザ定義の関数を作成しました。しかしそれにはいくつかの問題があります。詳しく教えてください。 この関数を作成したとします。PHP内でユーザ定義のmysql関数を作成する

<?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; RETURN出力。 END 'at 9行 誰も解決策を提案できますか?私は立ち往生しています。 私は 'SELECT t_name for tbl_names where id = 1'というクエリを実行し、その結果をパラメータとして渡すことができます。はい、うまくいくが、私はそれを避けたい。

答えて

2

mysql_queryでは、一度に1つのクエリしか許可されません。その制限がある場合、あなたはそれでもっとも単純なストアドプロシージャを定義することはできません。

とにかくmysql拡張機能を使用するべきではありません。これは古代のもので、ストアドプロシージャのようなものを持たないバージョンのMySQL用に作られたものです。なぜそれがまだ存在するのかは、私が超えている。

いずれにしても、mysqli拡張機能を使用できます。さらにan example in the docsがあります。それはあなたがそれにもっと慣れているならば、古い手続き的方法と全く同じように使うことができます。

0

関数を作成する前に区切り記号を変更し、関数定義を区切るために「新しい」区切り記号を使用する必要があります。その後、関数定義を完了した後、区切り記号を;に戻します。

関連する問題