PDA

View Full Version : سوال: نحوه استفاده از Stored Procedures در php



billgivz
چهارشنبه 17 آذر 1389, 15:01 عصر
سلام

میخواستم بدونم چطور میشه از Stored Procedures در php استفاده کنم ؟




CREATE PROCEDURE procedure1
(IN parameter1 INTEGER)
BEGIN
DECLARE variable1 CHAR(10);
IF parameter1 = 17 THEN
SET variable1 = 'birds';
ELSE
SET variable1 = 'beasts';
END IF;
INSERT INTO table1 VALUES (variable1);
END

به طور مثال همین پرسیجر بالا رو چطوراستفاده کنم منظورم اینه اون رو تو صحفه خاصی با پسوند خاصی باید ذخیره کنم و بعد بوسیله php اون رو فراخونی کنم .

بیشتر مد نظرم همون برنامه نویسی لایه ای هست .

لطفا اگه امکانش هست همین جا بهم پاسخ بدین چون سایت های مختلفی دیدم چیزی نفهمیدم !

Keramatifar
چهارشنبه 17 آذر 1389, 15:07 عصر
دوست عزیز
Stored Procedure در واقع توابع کار با داده ها سمت دیتابیس است
شما باید این دستور را در mysql اجرا کنی تا sp ایجاد شود و هرگاه نیاز بود در php آنرا فراخوانی کنید

billgivz
چهارشنبه 17 آذر 1389, 18:47 عصر
دوست عزیز
Stored Procedure در واقع توابع کار با داده ها سمت دیتابیس است
شما باید این دستور را در mysql اجرا کنی تا sp ایجاد شود و هرگاه نیاز بود در php آنرا فراخوانی کنید

میشه بیشتر توضیح بدین

billgivz
چهارشنبه 17 آذر 1389, 18:58 عصر
من در http://localhost/phpmyadmin/querywindow.php به طور مثال این کد


CREATE PROCEDURE p ()
BEGIN
SELECT * FROM 'staff'
END;

حالا نمیدونم این کاری که انجام دادم درسته ؟ منظورم همون sp هست

ولی این پیغام نشون داد


phpMyAdmin خطا

پرس و جوي SQL: http://barnamenevis.org/themes/original/img/b_help.png (http://dev.mysql.com/doc/refman/5.0/en/select.html)
CREATE PROCEDURE p( ) BEGIN SELECT *
FROM 'staff'
END
پيغام MySQL :http://barnamenevis.org/themes/original/img/b_help.png (http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html)
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''staff'
END' at line 3

bestirani2
چهارشنبه 17 آذر 1389, 19:49 عصر
میشه بیشتر توضیح بدین

این رو به عنوا یک کوئری باید با تابع mysql_query اجرا کنید یا به طور مستقیم در برنامه های واسط mysql مثل php myadmin وارد کنید
و سپس کوئری زیر را اجرا کنید
call name
تا پروسجر مورد نظر اجرا شود

bestirani2
چهارشنبه 17 آذر 1389, 19:57 عصر
من در http://localhost/phpmyadmin/querywindow.php به طور مثال این کد


CREATE PROCEDURE p ()
BEGIN
SELECT * FROM 'staff'
END;حالا نمیدونم این کاری که انجام دادم درسته ؟ منظورم همون sp هست

ولی این پیغام نشون داد


phpMyAdmin خطا

پرس و جوي SQL: http://barnamenevis.org/themes/original/img/b_help.png (http://dev.mysql.com/doc/refman/5.0/en/select.html)
CREATE PROCEDURE p( ) BEGIN SELECT *
FROM 'staff'
END
پيغام MySQL :http://barnamenevis.org/themes/original/img/b_help.png (http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html)
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''staff'
END' at line 3



برای رفع این مشکل
Delimiter ای به غیر از ; در نظر بگیرید
مثلاً $

billgivz
چهارشنبه 17 آذر 1389, 21:11 عصر
سلام لطف کنید یک نگاهی به کد من بندازید مشکل از کجاست که این پیغام رو میده

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\test.php on line 17


<?php

$server="127.0.0.1";
$user="root";
$pass="";

$db="behdasht";
$p=mysql_connect($server,$user,$pass);
mysql_select_db($db);

mysql_query("CREATE PROCEDURE p()
BEGIN
SELECT name FROM staff
END;");

$query100=mysql_query("Call p()",$p);
$row100=mysql_fetch_assoc($query100);
echo $row100['name'];

?>لازم به ذکر اتصال به دیتا بیس و فیلد صحیح هست

bestirani2
چهارشنبه 17 آذر 1389, 23:08 عصر
پروسجر که خروجی نداره که شما از mysql_fetch_assoc استفاده کردید

billgivz
پنج شنبه 18 آذر 1389, 11:23 صبح
پروسجر که خروجی نداره که شما از mysql_fetch_assoc استفاده کردید


پس چه جور میشه استفاده کرد ؟

Keramatifar
پنج شنبه 18 آذر 1389, 11:38 صبح
پیشنهاد می کنم برای کار با دیتابیس، بخصوص زمانیکه با stored procedure کار می کنید از PHP Data Object :PDO استفاده کنید
http://php.net/manual/en/book.pdo.php

bestirani2
پنج شنبه 18 آذر 1389, 11:42 صبح
پروسجر برای زمانی مثل update یا insert استفاده میشه نه select
شما باید از function استفاده کنید تا یک متغیر رو برگردونه یا برای روالتون یک ورودی INOUT بگیرید که در هردو حالت نتیجه رو مجدد باید Select کنید مثلاً


CREATE FUNCTION hello (s CHAR(20))
RETURNS CHAR(50) DETERMINISTIC
RETURN CONCAT('Hello, ',s,'!');


SELECT hello('world');

billgivz
پنج شنبه 18 آذر 1389, 11:50 صبح
پیشنهاد می کنم برای کار با دیتابیس، بخصوص زمانیکه با stored procedure کار می کنید از PHP Data Object :PDO استفاده کنید
http://php.net/manual/en/book.pdo.php

ممنون از پاسختون


میخواستم بدونم بدون pdo نمیشه با متودی ساده تر با stored procedure کار کرد ؟

میشه دلیل پیشنهادتون رو بدونم که چرا بهتر از pdo اسنفاده کرد ؟

UnnamE
پنج شنبه 18 آذر 1389, 12:48 عصر
درود
ببخشيد پاپتي ميپرم وسط حرفتون، اگه لطف كنيد در مورد اين Stored Procedures يه نقطه شروع بهم معرفي كنيد ممنون ميشم
مرسي

billgivz
پنج شنبه 18 آذر 1389, 13:05 عصر
63367
درود
ببخشيد پاپتي ميپرم وسط حرفتون، اگه لطف كنيد در مورد اين Stored Procedures يه نقطه شروع بهم معرفي كنيد ممنون ميشم
مرسي

اینم یک pdf ساده

bestirani2
پنج شنبه 18 آذر 1389, 13:33 عصر
ممنون از پاسختون


میخواستم بدونم بدون pdo نمیشه با متودی ساده تر با stored procedure کار کرد ؟

میشه دلیل پیشنهادتون رو بدونم که چرا بهتر از pdo اسنفاده کرد ؟
pdo هم یک Exception هست مثل mysql
و در حقیقت راه اتصال به پایگاه داده هست که در کنارش بعضی از دستورات sql رو هم از قبل در داخل توابعش جا داده
ولی از نظر سرعت از mysqli کندتر هست ولی مزیتش هم این هست که میتوانید به هر نوع پایگاه داده ای از جمله sql server وصل شد باهاش
ولی اگر فقط میخواهید از mysql استفاده کنید به نظر من بهترین گزینه mysqli هست که از multi query هم پشتیبانی میکنه
http://ir2.php.net/manual/en/book.mysqli.php

bestirani2
پنج شنبه 18 آذر 1389, 13:35 عصر
درود
ببخشيد پاپتي ميپرم وسط حرفتون، اگه لطف كنيد در مورد اين Stored Procedures يه نقطه شروع بهم معرفي كنيد ممنون ميشم
مرسي
http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

billgivz
پنج شنبه 18 آذر 1389, 13:51 عصر
pdo هم یک Exception هست مثل mysql
و در حقیقت راه اتصال به پایگاه داده هست که در کنارش بعضی از دستورات sql رو هم از قبل در داخل توابعش جا داده
ولی از نظر سرعت از mysqli کندتر هست ولی مزیتش هم این هست که میتوانید به هر نوع پایگاه داده ای از جمله sql server وصل شد باهاش
ولی اگر فقط میخواهید از mysql استفاده کنید به نظر من بهترین گزینه mysqli هست که از multi query هم پشتیبانی میکنه
http://ir2.php.net/manual/en/book.mysqli.php

از پاسخ تون ممنون pdo از mysql سرعتش کمتر هست ؟

bestirani2
پنج شنبه 18 آذر 1389, 14:11 عصر
از پاسخ تون ممنون pdo از mysql سرعتش کمتر هست ؟
http://blogs.vinuthomas.com/2006/08/07/benchmark-mysql-mysqli-pdo-in-php/

billgivz
پنج شنبه 18 آذر 1389, 14:30 عصر
pdo هم یک Exception هست مثل mysql
ولی اگر فقط میخواهید از mysql استفاده کنید به نظر من بهترین گزینه mysqli هست که از multi query هم پشتیبانی میکنه
http://ir2.php.net/manual/en/book.mysqli.php

یعنی میتونم پایگاه دادهام mysql باشه بعد واسه اتصال از mysqli استفاده کنم !

مشکلی به نمیزنه ؟ مگه کانکشن mysqli مال زمانی نیست که ما دیتابیسمون رو با SQLiteManager (http://www.sqlitemanager.org/) ساخته باشیم ؟

اصلا mysql با mysqli در چیه ؟

bestirani2
پنج شنبه 18 آذر 1389, 14:33 عصر
mysqli فقط مال mysql هست که نسخه جدید mysql هست که از ویژگی هایی مثل شئ گرایی، مولتی کوئری و ... پشتیبانی میکند

امیـرحسین
پنج شنبه 18 آذر 1389, 16:23 عصر
به نظر من PDO گزینه بهتریه و برای آینده میتونه مفید واقع بشه. من در حال حاضر دارم توسط PDO از Stored Procedures استفاده می‌کنم و خوب هم نتیجه میگیرم. تفاوت سرعت PDO و Mysqli خیلی ناچیزه.
به اضافه اینکه ظاهرا برای کار کردن با SP با MySQLi باید از روشی (یه جا یه کلاس Sample ازش دیدم) بعد از هر Fetch، حافظه دستور رو Free کرد ولی در PDO در برخی سرورها اجرای تابع closeCursor در آخر کار کافیه.

r0ot$harp
جمعه 27 خرداد 1390, 01:40 صبح
سلام دوستان عزیز .

برام جالب بود که ببینم تو انجمن در مورد PDO چی هست چی نیست ؟؟؟ تو چند صفحه قبل دیدم که دوستی گفته بود که MYSQL سرعتش بیشتر از PDO هست .

خوب در اصل بله اینطوری هست اما نه در همه شرایط . چند سایت و چند مثال در زیر معرفی می کنم که Benchmark های جالبی رو انجام دادن . در ضمن خودم یه تستی گرفتم از اضافه کردن 1000 سطر به جدول .
جدول حاوی تنها یک فیلد هست از نوع Varchar و به طول 15 .

نتایج :
PDO : 5.9310600757599
MYSQL : 7.1024129390717

http://joseph.randomnetworks.com/2006/04/04/php-database-functions-vs-peardb-vs-adodb/

http://jonathanrobson.me/2010/06/mysqli-vs-pdo-benchmarks


در ضمن از دوستان می خوام نظرشون رو در مورد این افزونه جالب بگن .

و در آخر جالب ترین چیزی که خیلی ازش خوشم اومد پاکسازی وردی های sql هست . توسط تابع prepare .


باتشکر احسان