سؤال

كيف يمكنني تحويل الاستعلامين التاليين إلى استعلام واحد

$sql    = "SELECT level FROM skills WHERE id = $id LIMIT 1;";
$result = $db->sql_query($sql);
$level  = (int) $db->sql_fetchfield('level');
$db->sql_freeresult($result);

++$level;

$sql    = "UPDATE skills SET level = $level WHERE id = $id;";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

أنا أستخدمه في نموذج phpBB لكن الجوهر هو أنني أحصل على المستوى وأضيف إليه مستوى ثم أقوم بالتحديث، ويبدو أنه سيكون أسهل وأسرع بكثير إذا تمكنت من القيام بذلك كاستعلام واحد.

يحرر: $id لقد تم بالفعل إجباره على أن يكون عددًا صحيحًا، وبالتالي ليست هناك حاجة للهروب هذه المرة.

هل كانت مفيدة؟

المحلول

هل أتعرض للإهانة من أجل هذا؟

$sql = "UPDATE skills SET level = level+1 WHERE id = $id";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

في حالة Teifion المحددة، يدرج phpBB DDL هذا الحقل المعين على أنه ليس NULL، لذلك ليس هناك خطر من زيادة NULL.

في الحالة العامة، يجب ألا تستخدم NULL لتمثيل الصفر.زيادة فارغة يجب إعطاء إجابة NULL.إذا كنت من المطورين المضللين الذين يعتقدون أن NULL=0، فابتعد عن لوحة المفاتيح وابحث عن هواية أخرى، فأنت تجعل الحياة صعبة بالنسبة لبقيتنا.بالطبع هذه هي صناعة الكمبيوتر ومن نحن لنقول أنك مخطئ؟إذا لم تكن مخطئا، استخدم

$sql = "UPDATE skills SET level = COALESCE(level,0)+1 WHERE id = $id";

...ولكن دعونا نواجه الأمر:أنت مخطئ.إذا بدأ الجميع من المستوى 0، فيجب أن يتضمن DDL الخاص بك

level INT DEFAULT '0' NOT NULL

في حالة نسيان المبرمجين ضبطه عند إنشاء سجل.إذا لم يبدأ الجميع من المستوى 0، فقم بتخطي المستوى الافتراضي وأجبر المبرمج على توفير قيمة عند الإنشاء.إذا كان بعض الناس يتجاوزون المستويات، والذين يعتبر الحصول على مستوى أمرًا لا معنى له، فإن إضافة مستوى إلى مستواهم بالتساوي ليس له معنى.في هذه الحالة، قم بإسقاط NOT NULL من DDL.

نصائح أخرى

من هنا:

UPDATE skills
SET level = level + 1
WHERE id = $id

مع PDO والاستعلام المجهز:

$query = $db->prepare("UPDATE skills SET level = level + 1 WHERE id = :id")
$query->bindValue(":id", $id);
$result = $query->execute();

$sql = "تحديث مستوى مجموعة المهارات = المستوى + 1 حيث المعرف = $id";

أتمنى فقط أن تقوم بتطهير $id بشكل صحيح في مكان آخر في الكود الخاص بك!

جرب هذا

UPDATE skills SET level = level + 1 WHERE id = $id

ماذا عن:

UPDATE skills SET level = level + 1 WHERE id = $id;

حصيرة:هذا ما تم لصقه من السؤال.لم يتم تحريره، لذلك أعزو ذلك إلى خطأ في Markdown.لكن الغريب أنني لاحظت ذلك.

أيضًا:نعم، mysql_escape_string()!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top