powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL 5.0 + php 5 + Stored Procedure
10 сообщений из 10, страница 1 из 1
MySQL 5.0 + php 5 + Stored Procedure
    #32731608
Okram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!!!

Помогите написать на MySQL 5.0 SP и потестировать на php 5.
И кто может и кому не лень, подскажите где я ошибся или чтото не правильно зделал.

Зделал на своем MySQL 5.0 такую таблицу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DROP TABLE IF EXISTS TTest;
CREATE TABLE TTest (
    id BIGINT NOT NULL auto_increment	, 
	p1 BIGINT NOT NULL DEFAULT  0 , 
	p2 CHAR ( 254 ) NOT NULL DEFAULT ''		, 
	p3 CHAR ( 254 ) NOT NULL DEFAULT ''		, 
	p4 CHAR ( 254 ) NOT NULL DEFAULT ''		,
	p5 SMALLINT NOT NULL DEFAULT  0 		, 
	PRIMARY KEY(id) 
);

Потом создал такую SP

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
   
delimiter //

DROP PROCEDURE IF EXISTS SaveTest;
//

CREATE PROCEDURE SaveTest( IN pp0 BIGINT, IN pp1 BIGINT , IN pp2 CHAR( 254 ) ,IN pp3 CHAR( 254 ) , IN pp4 CHAR( 254 ) , IN pp5 BIGINT )
LANGUAGE SQL
BEGIN

IF pp0 IS NULL THEN SET pp0 =  0 ; END IF; 
IF pp1 IS NULL THEN SET pp1 =  0 ; END IF; 	   
IF pp2 IS NULL THEN SET pp2 = ''; END IF;  	   
IF pp3 IS NULL THEN SET pp3 = ''; END IF;  	   
IF pp4 IS NULL THEN SET pp4 = ''; END IF;  	   
IF pp5 IS NULL THEN SET pp5 =  0 ; END IF; 

SELECT id INTO @return_id
FROM TTest
WHERE p1 = pp1 AND
p2 = pp2 AND
p3 = pp3 AND
p4 = pp4 AND
p5 = pp5
LIMIT  1 ;

IF @return_id IS NULL THEN

INSERT INTO TTest (p1,p2,p3,p4,p5)
VALUES (pp1,pp2,pp3,pp4,pp5);

SET @return_id=LAST_INSERT_ID();

END IF;


END;
//
И вот какие результаты :
1)
mysql> CALL SaveTest(1,1,"r3","","",1);
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SELECT @return_id,IF(@return_id=0,LAST_INSERT_ID(),@return_id);
+------------+----------------------------------------------+
| @return_id | IF(@return_id=0,LAST_INSERT_ID(),@return_id) |
+------------+----------------------------------------------+
| 0 | 1 |
+------------+----------------------------------------------+
1 row in set (0.00 sec)

но при етом !!!!!!!!!
mysql> select * from TTest;
+----+----+----+----+----+----+
| id | p1 | p2 | p3 | p4 | p5 |
+----+----+----+----+----+----+
| 1 | 1 | r3 | | | 1 |
+----+----+----+----+----+----+
1 row in set (0.00 sec)


2) делаем еще раз
mysql> CALL SaveTest(1,1,"r3","","",1);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @return_id,IF(@return_id=0,LAST_INSERT_ID(),@return_id);
+------------+----------------------------------------------+
| @return_id | IF(@return_id=0,LAST_INSERT_ID(),@return_id) |
+------------+----------------------------------------------+
| 1 | 1 |
+------------+----------------------------------------------+
1 row in set (0.00 sec)

здесь всё ок


3)mysql> CALL SaveTest(1,1,"r4","","",1);
ERROR 2013 (HY000): Lost connection to MySQL server during query


4)

Создаю тестовую php страничку и получается так что SP вызивается реально только один раз :(
причем время исполнения приблизительно 0.04 sec. :(
Но я использовал PHP Version 4.3.3, пожалуйста у кого есть php 5, потестируйте на нем.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
<?
$ttt = time();

$t = time();
$link = mysql_connect("127.0.0.1", "SYSADMIN", "")
    or die("Could not connect : " . mysql_error());
echo "Connected successfully";
mysql_select_db("TEMPLATE") or die("Could not select database");

$t = ((time()-$t));
echo '<hr>'.$t.'<hr>';

$r = array();
$t = time();
for($i =  0 ; $i <  10 ; $i++){

	$query = "CALL SaveTest(1,1,\"".rand().time()."\",\"\",\"\",1);";
	$result = mysql_query($query) or die("Query failed : " . mysql_error());
	$query = "SELECT IF(@return_id=0,LAST_INSERT_ID(),@return_id);";
	$result = mysql_query($query) or die("Query failed : " . mysql_error());
	$r[$i] = mysql_result($result,  0 );
	mysql_free_result($result);
	
}

$t = ((time()-$t));

echo '<hr>'.$t.'<hr>';

print_r($r);

$t = time();

$query = "SELECT COUNT(*) FROM TTest";
$result = mysql_query($query) or die("Query failed : " . mysql_error());

echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "\t<tr>\n";
    foreach ($line as $col_value) {
        echo "\t\t<td>$col_value</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</table>\n";

mysql_free_result($result);
$t = ((time()-$t));


echo '<hr>'.$t.'<hr>';


mysql_close($link);

echo '<hr>'.((time()-$ttt)).'<hr>';
?>
...
Рейтинг: 0 / 0
MySQL 5.0 + php 5 + Stored Procedure
    #32733504
авторmysql> CALL SaveTest(1,1,"r3","","",1);
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SELECT @return_id,IF(@return_id=0,LAST_INSERT_ID(),@return_id);
+------------+----------------------------------------------+
| @return_id | IF(@return_id=0,LAST_INSERT_ID(),@return_id) |
+------------+----------------------------------------------+
| 0 | 1 |
+------------+----------------------------------------------+
1 row in set (0.00 sec)

но при етом !!!!!!!!!
mysql> select * from TTest;
+----+----+----+----+----+----+
| id | p1 | p2 | p3 | p4 | p5 |
+----+----+----+----+----+----+
| 1 | 1 | r3 | | | 1 |
+----+----+----+----+----+----+
1 row in set (0.00 sec)

Variable scope Вашего @return_id - тело процедуры. Посему, видимо и выскакивает ворнинг при вызове SaveTest, раз переменная не определена. Надо бы определить либо OUT параметр в процедуре, либо глобальную переменную.

авторделаем еще раз
mysql> CALL SaveTest(1,1,"r3","","",1);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @return_id,IF(@return_id=0,LAST_INSERT_ID(),@return_id);
+------------+----------------------------------------------+
| @return_id | IF(@return_id=0,LAST_INSERT_ID(),@return_id) |
+------------+----------------------------------------------+
| 1 | 1 |
+------------+----------------------------------------------+
1 row in set (0.00 sec)

здесь всё ок

У меня все еще 0. Может как-то "случайно" все таки определили как глобальную.:)

авторmysql> CALL SaveTest(1,1,"r4","","",1);
ERROR 2013 (HY000): Lost connection to MySQL server during query

Печально, но факт. Точно так же слетает.

авторСоздаю тестовую php страничку...
MySQL5.0.0a + PHP5
...та же самая фигня
...
Рейтинг: 0 / 0
MySQL 5.0 + php 5 + Stored Procedure
    #32733595
Temka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пробовал работать с ХП MySQL 5.0 на php 4.3.x. Реализовать то что хотел не удалось (нада было написать процедуру поиска и возврата результатов через курсор). Решили ХП в MySQL вообще не использовать, пока их до более-менее нормальной функциональности не доведут.
...
Рейтинг: 0 / 0
MySQL 5.0 + php 5 + Stored Procedure
    #32733792
TemkaЯ пробовал работать с ХП MySQL 5.0 на php 4.3.x. Реализовать то что хотел не удалось (нада было написать процедуру поиска и возврата результатов через курсор). Решили ХП в MySQL вообще не использовать, пока их до более-менее нормальной функциональности не доведут.

Вопрос только когда это будет?

MySQL doc:
автор
alpha indicates that the release contains some large section of new code that hasn't been 100% tested. Known bugs (usually there are none) should be documented in the News section. See section C MySQL Change History. There are also new commands and extensions in most alpha releases. Active development that may involve major code changes can occur in an alpha release, but everything will be tested before issuing a release. For this reason, there should be no known bugs in any MySQL release.

beta means that all new code has been tested. No major new features that could cause corruption in old code are added. There should be no known bugs. A version changes from alpha to beta when there haven't been any reported fatal bugs within an alpha version for at least a month and we have no plans to add any features that could make any old command unreliable.

gamma is a beta that has been around a while and seems to work fine. Only minor fixes are added. This is what many other companies call a release.

If there is no suffix, it means that the version has been run for a while at many different sites with no reports of bugs other than platform-specific bugs. Only critical bugfixes are applied to the release. This is what we call a production (stable) release.
...
Рейтинг: 0 / 0
MySQL 5.0 + php 5 + Stored Procedure
    #32734058
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартный вопрос: а что мешает использовать PostgreSQL, в котором хранимые процедуры довели до ума уже много лет как?
...
Рейтинг: 0 / 0
MySQL 5.0 + php 5 + Stored Procedure
    #32734124
BigHarry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартный ответ: потому что вместо PG лучше использовать FB, который до ума доведен гораздо плотнее...
...
Рейтинг: 0 / 0
MySQL 5.0 + php 5 + Stored Procedure
    #32734240
Temka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стандартный ответ: заказчик хочет это
...
Рейтинг: 0 / 0
MySQL 5.0 + php 5 + Stored Procedure
    #32734628
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigHarryСтандартный ответ: потому что вместо PG лучше использовать FB, который до ума доведен гораздо плотнее...

Если посмотреть "твой профайл", то сразу видно, что в форум по FB ты не пишешь.

Вывод о твоей компетентности в данном вопросе --- упражнение для читателей. :D

TemkaСтандартный ответ: заказчик хочет это
Заказчик --- фанат альфа-версий? Уважаю. :D
...
Рейтинг: 0 / 0
MySQL 5.0 + php 5 + Stored Procedure
    #32734691
BigHarry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sad Spirit
Если посмотреть твой профайл, то сразу видно, что в форум по FB ты не пишешь.
Чукча не писатель, чукча читатель.

Sad Spirit
Вывод о твоей компетентности в данном вопросе --- упражнение для читателей.
А вся твоя компетентность в этом конкретном форуме - тупо пропагандировать PG. Я не удивлюсь, если в форуме по PG большинство твоих ответов - советы почитать мануал или факи.
...
Рейтинг: 0 / 0
MySQL 5.0 + php 5 + Stored Procedure
    #32739730
Okram
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Олег ОлеговичVariable scope Вашего @return_id - тело процедуры. Посему, видимо и выскакивает ворнинг при вызове SaveTest, раз переменная не определена. Надо бы определить либо OUT параметр в процедуре, либо глобальную переменную.

Тестировал с OUT тоже не работает :(

Скажите пожалуйста, может хоть ктото умудрился зделать
хоть самую простую SP чтобы она коректно работала на php+MySQL ?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL 5.0 + php 5 + Stored Procedure
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]