2012-02-07 5 views
1

У меня есть эта проблема, в результате, я создал определенную пользователем функцию в php. Но у него есть некоторые проблемы. Позвольте мне уточнить. Предположим, я создал эту функциюсоздание пользовательской функции mysql в 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; Выход RETURN; END 'в строке 9 Может ли кто-нибудь предложить решение ?, я застрял. Я знаю, что могу выполнить запрос «SELECT t_name для tbl_names, где id = 1», и передать результат в качестве параметра. Это будет работать, но я хочу избежать этого.

ответ

2

mysql_query не разрешает, кроме одного запроса за раз. С этим ограничением вы не сможете определить какие-либо, но самые тривиальные хранимые процедуры.

Как правило, вы не должны использовать расширение mysql - оно древнее и было сделано для версий MySQL, у которых даже не было таких вещей, как хранимые процедуры. Почему это все еще существует, вне меня.

В любом случае, вы можете использовать расширение mysqli; есть даже an example in the docs. Его можно использовать совершенно аналогично старому процессуальному способу, если вам более комфортно с этим.

0

Перед созданием вашей функции необходимо изменить разделитель и использовать свой «новый» разделитель, чтобы разграничить определение функции. Затем измените свой разделитель на ; после завершения определения функции.

Смежные вопросы