satırları sayma ve mysqli'nin ile bilgi geçirmeden

4 Cevap php

Ben mysqli için bir php sayfası dönüştürmek için çalışıyorlar, ve bazı sorunlar encoutnered var. Aşağıdaki kodu, ve ben işe şeyleri sipariş yolu göz önüne alındığında, ben daha iyi bir yol mysqli yöntemler kullanıyor bilmek istiyorum.

Mysql_num_rows bir mysqli alternatif var mı veya satır gerekli sayısını hesaplamak için farklı bir yöntem?

Nasıl mysqli kullanarak aşağıdaki yapardın?:

$data = mysql_query($countQuery) or die(mysql_error());
$rowcount = mysql_num_rows($data);

Mysql_Fetch_Assoc için alternatif nedir? Ben yedek işlevi olsa bile, ben kullanıyorum geçerli satırlar yöntemi kullanılarak olmamalıdır, bu yüzden ne doğru bir yaklaşım olacağını hissediyorum?

Ben bu soruları için özür dilerim, ama ben bugüne kadar kendimi cevapları belirlemek mümkün olmamıştır.

<?php
$con = mysqli_connect("localhost", "user", "", "ebay");
if (!$con) {
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
    exit;
}
$con->query("SET NAMES 'utf8'");
$cmd = "word";
//normally retrieved from GET
if($cmd=="deleterec") {
    $deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?";
    if ($delRecord = $con->prepare($deleteQuery)) {
    	$delRecord->bind_param("s", $pk);
    	$delRecord->execute();
    }
}
$table = 'AUCTIONS';
$brand = "test";
$countQuery = "SELECT ARTICLE_NO FROM ? WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("ss", $table, $brand);
    $numRecords->execute();
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = mysql_num_rows($data);
    $rows = getRowsByArticleSearch($query, $table, $max);
    $last = ceil($rowcount/$page_rows);
}
$self = htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'utf-8');
foreach ($rows as $row) // print table rows {
    echo '<tr>' . "\n";
    echo '<td><a href="#" onclick="doThings(\'Layer2\', \'' . $pk . '\')">'.$row['USERNAME'].'</a></td>' . "\n";
    // repeated for each column
}
function getRowsByArticleSearch($searchString, $table, $max) {
    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 ? 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("ss", $searchString, $table);
    	$getRecords->execute();
    	$getRecords->bind_result($ARTICLE_NO, $USERNAME, $ACCESSSTARTS, $ARTICLE_NAME, $shortDate);
    	while ($getRecords->fetch()) {
    		$result = $con->query($recordsQuery);
    		$rows = array();
    		while($row = mysql_fetch_assoc($result)) {
    			$rows[] = $row;
    		}
    		return $rows;
    	}
    }
}

4 Cevap

Ben doğru özellik / fonksiyon ile kod örneği, söz söz, iki sorunları gidermek için çağırır yazılabilir ettik:

<?php
$con = mysqli::connect("localhost", "user", "", "ebay");

if (!$con) {
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
    exit;
}

$con->query("SET NAMES 'utf8'");
$cmd = "word";

//normally retrieved from GET
if($cmd=="deleterec") {
    $deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?";
    if ($delRecord = $con->prepare($deleteQuery)) {
        $delRecord->bind_param("s", $pk);
        $delRecord->execute();
    }
}

$table = 'AUCTIONS';
$brand = "test";
$countQuery = "SELECT ARTICLE_NO FROM ? WHERE upper(ARTICLE_NAME) LIKE '% ? %'";

if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("ss", $table, $brand);
    $numRecords->execute();
    $data = $con->query($countQuery) or die(print_r($con->error));

    // Here is the property that you can reference to determine the affected rows from the previous query. -- gabriel
    $rowcount = $data->num_rows; 
    $rows = getRowsByArticleSearch($query, $table, $max);
    $last = ceil($rowcount/$page_rows);
}

$self = htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES,'utf-8');

foreach ($rows as $row) // print table rows {
    echo '<tr>' . "\n";
    echo '<td><a href="#" onclick="doThings(\'Layer2\', \'' . $pk . '\')">'.$row['USERNAME'].'</a></td>' . "\n";
    // repeated for each column
}

function getRowsByArticleSearch($searchString, $table, $max) {
    //global $con; Globals are BAD!! Please don't use.
    $con = mysqli::connet("localhost", "user", "", "ebay");

    $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 ? 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("ss", $searchString, $table);
        $getRecords->execute();
        $getRecords->bind_result($ARTICLE_NO, $USERNAME, $ACCESSSTARTS, $ARTICLE_NAME, $shortDate);
        while ($getRecords->fetch()) {
                $result = $con->query($recordsQuery);
                $rows = array();

    			// Notice the adjusted function call to retrieve the associate array for each record within the result set. -- gabriel
                while($row = $result->fetch_assoc()) {
                        $rows[] = $row;
                }
                return $rows;
        }
    }
}

Ancak, bu dusoft MySQLi arabası ve sorunlar yaratmak için bilinen değerlendirmesinde doğru idi eklemek istiyorum. Biz PDO MySQLi geçmek için (en azından 5.1 olarak PHP yerli olan) ve biz bu yana herhangi bir sorun olmadı vardı bu nedenle içindir. Ben kuvvetle PDO bakmak ya da belki Armut kütüphanelerinden biri aslında veritabanı bağlantı arayüz sağlamak için tavsiye ederim.

Ben genellikle doğrudan benim yürütmek sonra bu kullanın:

 $query->execute();
 // store the result first
 $query->store_result();
 $rows = $query->num_rows;

Aslında ilk soruyu cevaplamak için:

$data = mysql_query($countQuery) or die(mysql_error());
$rowcount = mysql_num_rows($data);

Mysqli kullanarak bunu yapmak istiyorsanız, mysqli_num_rows gayet güzel çalışıyor. Tek fark, sorguda bağlantı parametresi koymak unutmayın edilir.

$data = mysqli_query($dbc,$countQuery) or die(mysql_error());

Sen kullanabilirsiniz:

$data->num_rows();
$data->fetch_assoc();

Daha fazla bilgi num_rows ve fetch_assoc için dokümanlar kontrol edebilirsiniz.