سؤال

ولدي وظيفة، والتي هي لإرجاع مجموعة من الصفوف containg السجلات من قاعدة بيانات، يتم اختيارهم على أساس استعلام LIKE. أريد هذا الاستعلام ليكون بيان معد سلفا لأسباب أمنية. على ما يبدو لا يمكنني استخدام المعلمات المربوطة وظيفة الاستعلام كما أقوم به. أنا غير متأكد بعد ذلك، كيفية الحفاظ على لي الاستعلام باسم بيان معد سلفا، وإعادة الصفوف التي أنا أحاول العودة.

function getRowsByArticleSearch($searchString, $table, $max) {
    $con = mysqli_connect("localhost", "x", "x", "x");
    //global $con;
    $recordsQuery = "SELECT ARTICLE_NO, USERNAME, ACCESSSTARTS, ARTICLE_NAME, date_format(str_to_date(ACCESSSTARTS, '%d/%m/%Y %k:%i:%s'), '%d %m %Y' ) AS shortDate FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE '%?%' ORDER BY str_to_date(ACCESSSTARTS, '%d/%m/%Y %k:%i:%s')" . $max;
    if ($getRecords = $con->prepare($recordsQuery)) {
        $getRecords->bind_param("s", $searchString);
        //$getRecords->execute();
        echo "test if";
        //$getRecords->bind_result($ARTICLE_NO, $USERNAME, $ACCESSSTARTS, $ARTICLE_NAME, $shortDate);
        while ($getRecords->fetch()) {
            $result = $con->query($recordsQuery);
            $rows = array();
            echo "test while";
            while($row = $result->fetch_assoc()) {
                $rows[] = $row;
            }
        }
        return $rows;
    } else {
        print_r($con->error);
    }
}

ولم يتم إدخال حلقة في حين على الإطلاق.

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

المحلول

وعلى الرغم من أن مملة إذا كنت قد حصلت على العديد من الأعمدة، يمكنك أن تفعل فقط:

function getRowsByArticleSearch($searchString, $table, $max) {

  $con = mysqli_connect("localhost", "x", "x", "x");
  $recordsQuery = "SELECT ARTICLE_NO, USERNAME, ACCESSSTARTS, ARTICLE_NAME, date_format(str_to_date(ACCESSSTARTS, '%d/%m/%Y %k:%i:%s'), '%d %m %Y' ) AS shortDate FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE ? ORDER BY str_to_date(ACCESSSTARTS, '%d/%m/%Y %k:%i:%s')" . $max;
  if ($getRecords = $con->prepare($recordsQuery)) {
        $getRecords->bind_param("s", $searchString);
        $getRecords->execute();
        $getRecords->bind_result($ARTICLE_NO, $USERNAME, $ACCESSSTARTS, $ARTICLE_NAME, $shortDate);
        $rows = array();
        while ($getRecords->fetch()) {
            $row = array(
                'ARTICLE_NO' => $ARTICLE_NO,
                'USERNAME' => $USERNAME,
                 ...
            );
             $rows[] = $row;
        }
        return $rows;
    } else {
        print_r($con->error);
    }
}

وأساسا لديك لإنشاء الخاص بك يتطلب مجموعة النقابي نفسك، لأنك لا تستطيع استخدام $result_set->fetch_assoc().

نصائح أخرى

والكتابة "... LIKE ? ..." (بدلا من "... LIKE '%?%' ...") و$getRecords->bind_param("s", "%$searchString%");

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