2015-07-04 49 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() 
  • 你实际上不需要'钥匙'表。再考虑一下你的数据库模式。钥匙表是多余的。 '入口'表就足够了,只需更新入口表,你就很好。所有信息都可以通过正确查询条目表获得
  • 相关问题