2015-07-04 90 views
0

我有這個簡單的預排序數據庫輸入的東西,我之前創建了這個,我搞砸了是什麼方面。爲什麼這個PHP,而查詢不工作?

有兩個不同的表格:一個表格,用於跟蹤關鍵字的頻率以及表格中與關鍵字配對的表格。

我在做什麼是通過關鍵字保存某些東西,我檢查是否存在關鍵字,如果存在,我遞增該關鍵字的計數,然後繼續將條目添加到條目數據庫,如果沒有,我創建該關鍵字在關鍵字表中的新條目並將計數設置爲1,然後將條目添加到條目數據庫中。

$query = "SELECT COUNT(*) FROM key WHERE key=?"; 
if($stmt = $link->prepare($query)){ 
    $stmt->bind_param('s',$key); 
    $stmt->execute(); 
    while ($row = $stmt->fetch_row()){ 
     $count = $row[0]; 
    } 

    // count comes out here 
    // echo $count; 
    if($count==0){ 
     // insert new entry 
     $stmt = mysqli_prepare($link, "INSERT INTO entry VALUES (?,?,?,?,?)"); 
     $stmt->bind_param('issss',$id,$poster,$key,$entry,$date); 
     $stmt->execute(); 

     // insert new key 
     $stmt = mysqli_prepare($link, "INSERT INTO key VALUES (?,?,?)"); 
     $stmt->bind_param('isi',$id,$key,$numtimes); 
     $stmt->execute(); 
    } else { 
     // insert new entry 
     $stmt = mysqli_prepare($link, "INSERT INTO entry VALUES (?,?,?,?,?)"); 
     $stmt->bind_param('issss',$id,$poster,$key,$entry,$date); 
     $stmt->execute(); 

     // update key count 
     $stmt = mysqli_prepare($link, "UPDATE key SET numtimes=key+1 WHERE key=$key"); 
     $stmt->bind_param('s',$key); 
     $stmt->execute(); 
    } 
} 
+1

首先聲明$ count = 0;在while循環之前,假設如果沒有數據行,那麼$ count就是沒有,你只在第一個時使用它 – sandeepKumar

+0

我不明白,這大概是我以前如何使用這個方法。我從來沒有宣佈計數,這是查詢的結果。因此,如果根據* successful * msql查詢沒有數據,則該行將爲0. – janicehoplin

+1

請正確縮進該代碼。 (如果是關於while塊的具體情況,請參考相關內容。) – mario

回答

1
<?php 
$query = "SELECT COUNT(*) FROM key WHERE key=?"; 
if($stmt = $link->prepare($query)){ 
    $stmt->bind_param('s', $key); 
    $stmt->execute(); 
    $result = $stmt->get_result(); 
    while ($row = $result->fetch_row()){ 
     $count = $row[0]; 
    } 
    $stmt->close(); 

    // count comes out here 
    // echo $count; 
    if($count == 0){ 
     // insert new entry 
     $stmt = mysqli_prepare($link, "INSERT INTO entry VALUES (?,?,?,?,?)"); 
     $stmt->bind_param('issss', $id, $poster, $key, $entry, $date); 
     $stmt->execute(); 

     // insert new key 
     $stmt = mysqli_prepare($link, "INSERT INTO key VALUES (?,?,?)"); 
     $stmt->bind_param('isi',$id,$key,$numtimes); 
     $stmt->execute(); 
     $stmt->close(); 
    } else { 
     // insert new entry 
     $stmt = mysqli_prepare($link, "INSERT INTO entry VALUES (?,?,?,?,?)"); 
     $stmt->bind_param('issss',$id,$poster,$key,$entry,$date); 
     $stmt->execute(); 

     // update key count 
     $stmt = mysqli_prepare($link, "UPDATE key SET numtimes=key+1 WHERE key=$key"); 
     $stmt->bind_param('s',$key); 
     $stmt->execute(); 
     $stmt->close(); 
    } 
} 
?> 

這應該爲你做的伎倆,你不能使用fetch_row()直接在$語句,那是你的錯。

+0

我實際上不得不使用num_rows,因爲fetch_row/fetch_all甚至在安裝php5-mysqlnd後都不起作用,所以無論如何,至少我得到它的工作,有太多的廢話我不得不處理像鍵是一個保留字這也是另一個問題。無論如何謝謝你。當你將事情混在一起試圖讓某些事情發揮作用而不遵循學習的線性進展時,會發生這種情況。 – janicehoplin

0

有兩個問題

  1. 第一

    while ($row = $stmt->fetch_row()){ $count = $row[0]; }

應改爲簡單地

$count = $stmt-rowCount() 
  • 你實際上不需要'鑰匙'表。再考慮一下你的數據庫模式。鑰匙表是多餘的。 '入口'表就足夠了,只需更新入口表,你就很好。所有信息都可以通過正確查詢條目表獲得
  • 相關問題