hazırlanmış bir deyimi getiriliyor verileri

2 Cevap php

Ben GİBİ sorguya dayalı seçilmiş bir veritabanından kayıtları containg satırlar dizisi, geri dönmek için bir işlevi var. Bu sorgu, güvenlik nedenleriyle bir hazır deyimi olmak istiyorum. Görünüşe bağlı parametreleri ve ben yapıyorum gibi sorgu işlevini kullanamazsınız. Ben hazırlanmış bir ifadesi olarak bana sorgu tutmak nasıl, sonra emin değilim, ve ben geri dönmek için çalışıyorum satırları döndürmek.

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);
    }
}

While döngüsü tüm girilir asla.

2 Cevap

Sıkıcı olsa da çok sayıda sütun var ise, sadece yapabileceği:

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);
    }
}

Esasen sen kullanamazsınız çünkü, sizin gerekli ilişkisel dizi kendiniz oluşturmak zorunda $result_set->fetch_assoc().

Yazın "... LIKE ? ..." (yerine "... LIKE '%?%' ...") ve $getRecords->bind_param("s", "%$searchString%");