💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ علیرضا ابراهیمی
حذف چندین شماره id با دستور delete
محسن موحد حل شده توسط محسن موحد

ممنون از تدریس عالی جناب دکتر آوند عزیز و گرامی... سوالی که داشتم اینه اگر بخوایم چندین شماره id رو که ترتیب خاصی هم ندارند در قالب دستور delete حذف کنیم، چطور باید دستورش رو بنویسیم من خودم براساس سرچ هایی که داشتم معمولا از دو حالت استفاده کرده بودن یکی اینکه id‌ها رو در قالب اپراتور IN به صورت گروهی حذف کنیم و دستوری که من استفاده کردم و البته جواب هم داد اینه که به ازای هر ID یه متغیر تعریف کردم و اونها رو از طریق اپراتور OR به شکل زیر حذفشون کردم... منتها زمانی از متغیر آرایه ای برای حذف شماره ID‌ها در تابع bind_param استفاده کردم که همه تو یه متغیر تعریف شن و حذف شن جواب نداد، کدی که برای من جواب داد اینه:

 

$users_id5 = 12;
$users_id6 = 13;
$sql = "delete from people where id = ? or id = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('ii',$users_id5,$users_id6);
$stmt->execute();

 

جناب دکتر آوند عزیز اگر محبت کنید و روشی رو ذکر بفرمایید که از طریق متغیر آرایه ای بتونم چندین id رو به صورت امن و از طریق توابع prepare و bind_param اعتبارسنجی کنم و حذفشون کنم ممنون میشم بزرگوار...

سلام.

بجای or‌های متوالی، از IN استفاده کنید.

کوئریو باید از روی آرایه خودتون تولید کنید:

$ids = [30, 32, 34];
$params = implode(',', array_fill(0, count($ids), '?'));
$stmt = $pdo->prepare(
    'DELETE
     FROM `tasks`
     WHERE `id` IN(' . $params . ')'
);
$stmt->execute($ids);

علت implode کردن آرایه اینه که کوئری یک string هست و شما باید در قالب یک رشته کوئریو تولید کنید.

محسن موحد ۱۱ اردیبهشت ۱۳۹۹، ۱۰:۲۴

مثالی برای Mysqli:

$ids = [30, 32, 34];
$params = implode(',', array_fill(0, count($ids), '?'));
$stmt = $mysqli->prepare(
    'DELETE
     FROM `tasks`
     WHERE `id` IN(' . $params . ')'
);
$stmt->bind_param(str_repeat('i', count($ids)), ...$ids);
$stmt->execute();

 

بهترین پاسخ
محسن موحد ۱۱ اردیبهشت ۱۳۹۹، ۱۱:۱۸

سلام خدمت اساتید  و دوستان گرامی

 

ممنونم از تدریس دکتر لقمان آوند .

حدف  چندین ایدی بطور متوالی در mysqli  که با استفاده از تابع  prepare بطور کامل حذف شده. و نحوه کار را  بطور کامل با  عکس  توضیح دادم امیدوارم مفید واقع بشه.

 

مبنع:

 حذف ایدی متوالی

 

موفق باشید.

 

آرش مکینیان ۰۱ آذر ۱۳۹۹، ۱۳:۱۶