Mysqli Array -> الاستعلام غير مناسب البيانات الصحيحة

StackOverflow https://stackoverflow.com/questions/930279

  •  06-09-2019
  •  | 
  •  

سؤال

لي mysqli_fetch_array(mysqi_query($db, $query)) لا يبدو أن الحصول على المعلومات الصحيحة من قاعدة البيانات، وبالتالي، فإن تطبيق PHP لا يعمل كما ينبغي.

وهنا الاستفسارات،

<?php
if($_GET){
$current = mysqli_fetch_array(mysqli_query($db, "SELECT * from `tbl_user` WHERE `userid` = '".$_GET['userid']."'"));
$currentperms  = mysqli_fetch_array(mysqli_query($db, "SELECT * from `tbl_perms` WHERE `userid` = '".$_GET['userid']."'"));
} 
?>

في وقت واحد، if ($current['userid'] == "1") {echo(" selected ");} لا يخرج أي شيء على الإطلاق، لذلك لا يتم تحديد الخيار الصحيح في علامة تحديد.

لذلك، أين: كنت أتوقع: صدى (جيفرز $ [Newapp "])؛ لا تساوي 1، becuase تم تعيينه لذلك في قاعدة البيانات، والنتيجة التي هي "1". لدي اختبار هذا من خلال صدى السلسلة المكتسبة. NewApp ليس عمدا في الجدول أيضا، لذلك لا ينبغي أن يعود "1" نتيجة لذلك.

مع هذا:

 if $current['userid'] == "1") {
 echo(" selected ");
 }

ومع ذلك، يتم ترويض أي شيء، ومع ذلك، فقد تم استخدام المتغير في البرنامج النصي في وقت سابق، وهو الإخراج الذي هو "1".

الرجاء مساعدتي، أنا ذاهب إلى السطح: |

sasa: الإخراج: النجاح! صفيف ([0] => 1 [userid] => 1 [1] => shamil.nunhuck [اسم المستخدم] => shamil.nunhuck [2] => shamil nunhuck [userfullname] => shamil Nunhuck [3] => shamil.nunhuck@localhost [useremail] => shamil.nunhuck@localhost [4] => 6363d731bd7492fe4c33fc3d90fd61bc [userpassword] => 6363d731bd7492fe4c33fc3d90fd61bc [5] => 1 [userlevel] => 1 [6] => 1 [6] => 1 [6] => 1 [6] => المسؤول [Usertitle] => المسؤول [7] => 1 [TOS] => 1) صفيف ([0] => 1 [userid] => 1 [1] => 0 [ptodo] => 0 [2] = > 0 [usercp] => 0 [3] => 0 [PM] => 0 [4] => 0 [bug] => 0 [5] => 0 [abug] => 0 [6] => 0 [6] => 0 [6] => 0 [6] => 0 [6] => 0 [admincep] => 0 [7] => 0 [Intmgs] => 0 [8] => 0 [AddUser] => 0 [9] => 0 [تمرير] => 0 [10] => 0 [usereditit ] => 0 [11] => 0 [listuser] => 0 [12] => 0 [newapp] => 0)

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

المحلول

جرب هذا الرمز:

//  I put some echo for testing
if(!empty($_GET['id'])) {
    $id = (int)$_GET['id'];
    $sql = mysqli_query($db, "SELECT * from tbl_user WHERE userid = $id LIMIT 1");
    if(mysqli_affected_rows($db) == 0) {
        echo "There is no user with that id";
    } else {
        $current = mysql_fetch_assoc($sql);
        $currentperms  = mysql_fetch_assoc(mysqli_query($db, "SELECT * from tbl_perms WHERE userid = $id"));
        echo "Success!";
        // Or try to print result
        print_r($current);
        print_r($currentperms);
    }
} else {
    echo "There is no user id";
}

أو ربما مجرد خطأ في بناء الجملة:

مع هذا:

 if $current['userid'] == "1") {
 echo(" selected ");
 }

يجب أن يكون:

if($current['userid'] == 1) {
    echo(" selected ");
}

نصائح أخرى

إذا كانت المشكلة هي أن قاعدة البيانات تقوم بإرجاع معلومات غير صحيحة، فمن المحتمل أن تقوم بنشر جزء MySQL من التعليمات البرمجية (ESP. الاستعلام)، النتائج الحالية وأي النتائج التي توقع رؤيتها.

أيضا FYI، آمل أن تحليل VARS الخاص بك $ _POST $ قبل إلقاءها في هذا الاستعلام. اجتيازها مباشرة إلى SQL مثل هذه ليست فكرة جيدة.

أنا لست متأكدا 100٪ أتابع السؤال، ولكن يبدو أنك تقول أن نتيجة $current['userid'] == "1" هو خطأ، على الرغم من $current['userid'] الطباعة كما "1"، صحيح؟

إذا كان هذا هو الحال، فمن الممكن أن هناك بعض المستويات أو غيرها من غيرها من القيم التي تسبب في الفشل المقارنة، على الرغم من أنني أشك في أن هذا هو الحال إذا userid يتم إنشاؤها تلقائيا بواسطة قاعدة البيانات.

يمكنك التحقق من ذلك من خلال تفتيش القيمة بشكل أكثر شمولية، على سبيل المثال

var_dump( $current['userid'] ); // Check for whitespace
echo strlen( $current['userid'] ); // Is this greater than 1?
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top