ممنون از تدریس عالی جناب دکتر آوند عزیز و گرامی... سوالی که داشتم اینه اگر بخوایم چندین شماره 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 اعتبارسنجی کنم و حذفشون کنم ممنون میشم بزرگوار...
مثالی برای 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();
سلام.
بجای 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 که با استفاده از تابع prepare بطور کامل حذف شده. و نحوه کار را بطور کامل با عکس توضیح دادم امیدوارم مفید واقع بشه.
مبنع:
موفق باشید.