PDA

View Full Version : سوال: کار نکردن متغییر در خط های بعدی در pdo



ravand
سه شنبه 09 تیر 1394, 18:47 عصر
سلام
من توی pdo متغییری رو بکار بردم که در خط های بعدی اون کار نمیکنه.

$dbh->exec("SET CHARACTER SET utf8");
$sth = $dbh->prepare("SELECT * FROM `ravandi` ORDER BY id DESC LIMIT :mo, :limit");
$sth->bindParam(':mo', $mo, PDO::PARAM_INT);
$sth->bindParam(':limit', $limit, PDO::PARAM_INT);//متغییر لیمیت کار میکنه
$sth->execute();
$result = $sth->fetch(PDO::FETCH_OBJ);
if (!is_object($result)){
die("وجود ندارد.");
exit;
}

$dbh->exec("SET CHARACTER SET utf8");
$sth = $dbh->prepare("select * from `ravandi` ORDER BY id DESC LIMIT :mo, :limit");
$sth->bindParam(':mo', $mo, PDO::PARAM_INT);
$sth->bindParam(':limit', $limit, PDO::PARAM_INT);//متغییر لیمیت کار نمیکنه
if($sth->execute()){
foreach($sth as $rowi) {
$id=$rowi['id'];
}

الان متغییر $limit که در خط بعدی هست کار نمیکنه ولی متغییر $limit اولی کار میکنه. برام عجیبه که چرا اول این متغییر کار میکنه بعدا در خط های بعدی کار نمیکنه؟
متشکرم.

H:Shojaei
سه شنبه 09 تیر 1394, 22:48 عصر
خوب شما از die استفاده کردید و به هر دلیلی اون اجرا میشه واسه همینه...

ravand
چهارشنبه 10 تیر 1394, 10:04 صبح
خوب شما از die استفاده کردید و به هر دلیلی اون اجرا میشه واسه همینه...
اگه مشکل از die() بود که باید پیامشم چاپ میشد ولی پیامش چاپ نمیشه!

ravand
چهارشنبه 10 تیر 1394, 11:04 صبح
فهمیدم مقدار متغییر به خط بعدی میرفته ولی من نباید دو تا دستور sql یکسان رو با هم اجرا میکردم. خوب که دقت کردم دیدم اصلا نیازی نیست دستور اول به اون شکلی که نوشتم باشه. اینطوری هم می نوشتم کارم رو راه می انداخت چون باید پر یا خالی بودن جدول رو بررسی میکردم.
پس اولین دستورم باید این شکلی باشه:

$sth = $dbh->prepare("SELECT * FROM `ravandi`");

H:Shojaei
چهارشنبه 10 تیر 1394, 18:01 عصر
من که نمیدونم دقیقا میخواید چکار کنید ولی طبق چیزی که فهمیدم الآن کاری که اینجا کردید و اول چک کردید که جدول خالی نباشه، نیازی به این که اول چک کنید نداره که جدول خالیه یا نه!
شما میگید اگر جدول خالی بود کلا خارج شو اگر نبود بیا از رکورد فلان تا فلان رو بیار... حالا اگر اون رکوردهایی که توی محدوده مشخص کردید خالی باشه چی؟ سلکت اول بیفایده میشه!
به نظرم همون محدوده ای که گرفتید رو چک کنید که خالی هست یا نه کفایت میکنه به این که جدول پره و خالیه هم کاری نداشته باشید مثلا میگیم اگر محدوده ای که انتخاب شده خالی بود اونوقت die کن وگرنه رکوردها رو نمایش بده...

ravand
چهارشنبه 10 تیر 1394, 19:54 عصر
این دستور اول باید باشه . مثلا شما وارد صندوق پستی میشی . اگه پیامی نبود بهت بگه هیچ پیامی در صندوق پستی نیست. دستور بعدی هم براش نمایش رکوردهاست.

H:Shojaei
چهارشنبه 10 تیر 1394, 20:06 عصر
خوب اگر اینطوری باشه که ما هرجا شک داشته باشیم که احتمال این که جدول خالیه یا نه هر کاری بکنیم باید باید اول یک کوئری بگیریم که آیا خالیه یا نه اگر نبود بیا کار دیگه ای انجام بده...
یه مثال:
مثلا میریم سر صندوق پست میخوایم نامه امروز رو برداریم کاری هم به نامه های روزای قبل نداریم...
با کاری که شما کردید :
اگر صندوق خالی باشه. خوب سکلت اول اجرا میشه و دیگه هیچی...
اگر صندوق پر باشه. سلکت اول اجرا میشه میگه پره و سلکت دوم هم اجرا میشه اگر نامه امروزی داشتیم برمیداره میاره...

ولی اگر سلکت اول رو نگیرید:
اگر صندوق خالی باشه. میگیم نامه امروز رو بده و میگه ندارم خوب تمام...
اگر هم پر باشه. باز هم میگیم نامه امروز رو بده و باز هم همین و تمام...

بازم میگم شاید واقعا نیاز دارید به این کار ولی در حالت عادی هم نیازی نیست هم فکر کنم کار اضافیه شاید هم معلومات من کمه و درک نمیکنم...