为什么这个PHP虽然查询不起作用?

时间:2015-07-04 15:37:22

标签: php mysql

我有这个简单的预排序数据库输入的东西,我之前已经创建了这个,我搞砸的是while方面。

有两个不同的表:一个跟踪关键字频率的表和一个与关键字配对的条目表。

我正在做的是通过关键字保存某些东西,我检查关键字是否存在,如果存在,我增加该关键字的计数,然后继续将条目添加到条目数据库,如果不是我在关键字表中创建该关键字的新条目并将计数设置为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();
    }
} 

2 个答案:

答案 0 :(得分: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();
    }
}
?>

这应该可以解决这个问题,你不能直接在$ stmt上使用fetch_row(),这是你的错误。

答案 1 :(得分:0)

有两个问题

  1. 首先

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

  2. 应该简单地替换为

    $count = $stmt-rowCount()
    
    1. 您实际上不需要'keys'表。再次考虑您的数据库架构。钥匙表是多余的。 'entry'表只需更新条目表就可以了。通过正确查询条目表可以获得所有信息