PDA

View Full Version : مشکل با استور پروسیجر ها



com.mohsen
سه شنبه 07 آبان 1392, 09:13 صبح
با سلام
من دو تا استور پروسیجر نوشتم و تو یک صفحه اجرا می کنم ولی یکیو اجرا میکنه و اونیکیو اجرا نمیکنه.مشکل از استور پروسیجر نیست چون وقتی یکی از استور پروسیجر های رو کامنت می کنم(حذف میکنم) اونیکی به درستی اجرا میشه ولی با هم اجرا نمیشن.
ممنون ار کمکتون

Veteran
سه شنبه 07 آبان 1392, 09:22 صبح
والا هنوز به علم غیب دست پیدا نکردیم !
اگر کدهاتون رو بزارید تا بررسی کنیم میتونیم نتیجه بهتری بگیریم

com.mohsen
سه شنبه 07 آبان 1392, 09:34 صبح
این کدهاش


<?php
$cats_weblog = mysql_query("CALL sp_weblog_selectAll();");
$cats_rows = mysql_num_rows($cats_weblog);
if($cats_rows>0)
{
for ($j = 0 ; $j < $cats_rows ; ++$j)
{
$cats_id = mysql_result($cats_weblog,$j,'id');
$cats_title=mysql_result($cats_weblog,$j,'name');
?>
<li><a href="free_templates.php?id=<?php echo "$cats_id"; ?>"><?php echo "$cats_title"; ?></a></li>
<?php
}
}
else {
?>
<li><a href="#">هیچ موضوعی وجود ندارد</a></li>
<?php
}
?>


<?php
$f_p_query = mysql_query("CALL sp_finished_projects_selectAll();");
$f_p_rows = mysql_num_rows($f_p_query);
if($f_p_rows > 0)
{
for ($k = 0 ; $k < $f_p_rows ; ++$k)
{

$f_p_title=mysql_result($f_p_query,$k,'name');
$f_p_address=mysql_result($f_p_query,$k,'address') ;
?>
<a href="<?php echo "$f_p_address";?>"><p><i class="icon-plus"></i><?php echo "$f_p_title";?></p></a>
<?php
}

}
else{
echo "هیچ پروژه انجام شده ای وجود ندارد.";
}
?>


اینم ارورش


: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Users\Mohsen\Desktop\MyWebSite V3.0000\col-right.php on line 150

com.mohsen
سه شنبه 07 آبان 1392, 09:38 صبح
CREATE PROCEDURE sp_finished_projects_selectAll()
BEGIN
SELECT *
FROM `finished_projects`
ORDER BY `finished_projects`.`id` DESC;
END$$


CREATE PROCEDURE sp_weblog_selectAll()
BEGIN
SELECT *
FROM `weblogs`
ORDER BY `weblogs`.`position` ASC;
END$$

Veteran
سه شنبه 07 آبان 1392, 09:58 صبح
یک باره دیگه اجرا کنید


<?php
$cats_weblog = mysql_query("CALL sp_weblog_selectAll()");
if($cats_weblog && mysql_num_rows($cats_weblog) > 0) {
while($row = mysql_fetch_assoc($cats_weblog)) {
$cats_id = $row['id'];
$cats_title = $row['name'];
echo "<li><a href='free_templates.php?id='$cats_id''>$cats_title</a></li>";
}
}
else {
echo " <li><a href='#'>هیچ موضوعی وجود ندارد</a></li>";
}
$f_p_query = mysql_query("CALL sp_finished_projects_selectAll()");
if($f_p_query && mysql_num_rows($f_p_query) > 0) {
while($row = mysql_fetch_assoc($f_p_query)) {
$f_p_title = $row['name'];
$f_p_address = $row['address'];
echo "<a href='$f_p_address''><p><i class='icon-plus'></i>$f_p_title</p></a>";
}
}
else {
echo "هیچ پروژه انجام شده ای وجود ندارد.";
}
?>


ببینید خروجی چیه

com.mohsen
سه شنبه 07 آبان 1392, 10:16 صبح
متاسفانه مشکل حل نشد.ولی باز ممنون از اینکه وقت گذاشتید و راهنمایی کردید.
منتظر کمک دوستانمون هستم.
با تشکر
:ناراحت:

MMSHFE
سه شنبه 07 آبان 1392, 12:59 عصر
وقتی خطا میگیرین که خروجی boolean بوده یعنی Query خطا داشته. با mysql_error خطا رو چاپ کنید ببینیم مشکل از کجاست.

com.mohsen
سه شنبه 07 آبان 1392, 13:10 عصر
خطا رو تو پست 3 نوشتم

MMSHFE
سه شنبه 07 آبان 1392, 13:13 عصر
این خطا که مال PHP هست. خطای MySQL مهمه چی بوده. این دستور رو بعد از کدتون بگذارین:

echo mysql_error();

com.mohsen
سه شنبه 07 آبان 1392, 13:21 عصر
Commands out of sync; you can't run this command now

112348
فایل به همراه پایگاه داده ضمیمه شد

MMSHFE
سه شنبه 07 آبان 1392, 13:37 عصر
شما نمیتونید دو Stored Procedure رو همزمان در حافظه داشته باشین چون بطور پیشفرض MySQL نتایج SPها رو توی حافظه بافر نمیکنه. بهتره از MySQLi و دستور store_result اون استفاده کنید یا اینکه اول نتایج یکی رو استخراج کرده و توی آرایه معمولی PHP بگذارین و حافظه رو آزاد کنید و بعد، دومی رو اجرا کنید. مثال:


<?php
$cats_weblog = mysql_query('CALL sp_weblog_selectAll();');
if(if($cats_weblog)) {
if(mysql_num_rows($cats_weblog) > 0) {
while($cats_row = mysql_fetch_assoc($cats_weblog)) {
$cats_id = $cats_row['id']
$cats_title = $cats_row['name'];
echo '<li><a href="free_templates.php?id=' . $cats_id . '">' . $cats_title . '</a></li>' . PHP_EOL;
}
}
else {
echo '<li><a href="#">هیچ موضوعی وجود ندارد</a></li>' . PHP_EOL;
}
mysql_free_result($cats_weblog);
}
else {
echo '<li><a href="#">خطا در استخراج اطلاعات</a></li>' . PHP_EOL;
}
<?php
$f_p_query = mysql_query('CALL sp_finished_projects_selectAll();');
if($f_p_query) {
if(mysql_num_rows($f_p_query) > 0) {
while($f_p_row = mysql_fetch_assoc($f_p_query)) {
$f_p_title = $f_p_row['name'];
$f_p_address = $f_p_row['address'];
echo '<a href="' . $f_p_address . '"><p><i class="icon-plus"></i>' . $f_p_title . '></p></a>' . PHP_EOL;
}
}
else {
echo 'هیچ پروژه انجام شده ای وجود ندارد.';
}
mysql_free_result($f_p_query);
}
else {
echo 'خطا در استخراج اطلاعات' . PHP_EOL;
}
?>

com.mohsen
سه شنبه 07 آبان 1392, 13:54 عصر
با دستور زیر حافظه رو آزاد می کنید؟


mysql_free_result($cats_weblog);

ولی همچنان همان مشکل وجود دارد

MMSHFE
سه شنبه 07 آبان 1392, 13:57 عصر
بله حافظه آزاد میشه. برای اطمینان بیشتر، بعد از اجرای کوئری اول، اتصال به MySQL رو با mysql_close قطع و دوباره با mysql_connect وصل بشین. البته این مشکلات در MySQLi و PDO وجود نداره و بخاطر چنین مشکلاتی (و برخی مشکلات دیگه) هست که Extension قدیمی MySQL منسوخ شده و باید از MySQLi استفاده کنید.

shahriyar3
سه شنبه 07 آبان 1392, 14:26 عصر
از unbuffered query هم فکر میکنم بتونی استفاده کنی بدون اینکه کانکشن و بخوای ببندی بعد از کوئری اول .
اینو امتحان کن فکر کنم جواب بده


mysql_unbuffered_query

mahmod2000
سه شنبه 07 آبان 1392, 15:12 عصر
همونطور که آقای شهرکی عزیز هم فرمودند بهتره از PDO استفاده بشه برای Store Procedure

saeidpsl
سه شنبه 07 آبان 1392, 16:45 عصر
Only :قلب: PDO

Veteran
سه شنبه 07 آبان 1392, 19:34 عصر
جناب شهرکی علت تغییر دابل کوتیشن ها " به ' چی هست ؟ بهینه تر هست ؟

MMSHFE
سه شنبه 07 آبان 1392, 21:14 عصر
بله. سرعت پردازش رو بالاتر میبره چون رشته دیگه بخاطر وجود متغیر داخلش Scan نمیشه.