حذف چندین شماره id با دستور delete

پرسیده شده
فعالیت 1255 روز پیش
دیده شده 1247 بار
0

ممنون از تدریس عالی جناب دکتر آوند عزیز و گرامی... سوالی که داشتم اینه اگر بخوایم چندین شماره 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 اعتبارسنجی کنم و حذفشون کنم ممنون میشم بزرگوار...

فایل پیوست

علیرضا ابراهیمی
علیرضا ابراهیمی

11 اردیبهشت 99

4
حذف شده

مثالی برای 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();

 

فایل پیوست

محسن موحد

توسط

محسن موحد

11 اردیبهشت 99

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

11 اردیبهشت 99

1
حذف شده

سلام.

بجای 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 هست و شما باید در قالب یک رشته کوئریو تولید کنید.

فایل پیوست

محسن موحد

توسط

محسن موحد

11 اردیبهشت 99

حذف شده
درود بر شما محسن جان... علت اینکه کوئری رو باید رشته تعیین کنیم چی هست؟ چون نوع داده های id که عددی یا int هستند. من اینجای کار رو متوجه نشدم... بعد فکر کنم ساختاری رو که شما محبت کردید ارائه کردید، مربوط به کوئری زدن به پایگاه داده از طریق رابط PDO باید باشه... دلیلش چی هست؟ آیا نمیشه براساس تابع bind_param که مخصوص درایور mysqli هست این id ها رو حذف کرد؟ البته با همین اپراتور IN منظورمه... ممنون میشم بیشتر توضیح بدی محسن جان...
علیرضا ابراهیمی

11 اردیبهشت 99

حذف شده
در مورد اینکه کوئری یک رشته هست، خب این واضحه شما مگر نمینویسین: 'delete from tableName where id = 1' این مگر یک رشته نیست؟ پس حالا که آرایه ای از آیدی ها دارید، میایم با loop یا توابع آماده ای مثل implode آرایه رو تبدیل به رشته ای از اعداد یا مقادیر میکنیم.
محسن موحد

11 اردیبهشت 99

حذف شده
بله این نوعی که من مثال زدم مال PDO بود که میشه بجای استفاده از bindParam یا bindValue بصورت مستقیم به execute ارسال کرد. به _ وسط bind_param توجه نکردم که شما با mysqli نوشتید. فرقی نمیکنه همین مثالی که زدمو bind_param رو تولید میکنم.
محسن موحد

11 اردیبهشت 99

حذف شده
من حتی $mysqli داخل کدتون رو هم ندیدم :دیییی
محسن موحد

11 اردیبهشت 99

حذف شده
آهان بله اون قسمت رو متوجه شدم که شما منظورتون درخواستی هست که در قالب یک رشته به پایگاه داده میفرستیم که در قالب یک رشته با زبان sql براش تعریف میکنیم id های مورد نظر ما مثلا delete بشن... من اشتباه فکر کردم که منظور شما رو id هاست که الان اینو کامل متوجه شدم... منم بررسی میکنم این روش رو در قالب رابط mysqli... شما هم اگر کدش رو نوشتید اینجا به اشتراک بگذارید تا همه استفاده کنن و بتونن از طریق bind_param هم چندین id رو به صورت امن از پایگاه دادشون حذف کنن... ممنون از مشارکت شما جناب موحد گرامی...
علیرضا ابراهیمی

11 اردیبهشت 99

0
حذف شده

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

 

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

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

 

مبنع:

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

 

موفق باشید.

 

فایل پیوست

آرش مکینیان

توسط

آرش مکینیان

1 آذر 99