mysqli影响的行返回0,带有一个项目数组

时间:2015-08-02 13:28:19

标签: php mysqli

我遇到了以下问题。 我有一系列我想要更新的项目。以下是我的代码:

public function addTranslation( $data = array(), $language ) {
    // Add all words to language
    $stmt = $this->_db->prepare("UPDATE `languages` SET `$language` = ? WHERE `id` = ?");
    $stmt->bind_param('si', $translation, $id);

    $count = 0;
    foreach( $data as $id => $translation ) {
        $stmt->execute();

        if( !empty( $translation ) ) {
            $count++;
        }
    }

    // Check if all filled in words are added
    echo $stmt->affected_rows;
    if( $stmt->affected_rows >= $count ) {
        return true;
    } else {
        return false;
    }
}

我知道查询工作正常,因为当我在脚本运行后检查了我的数据库时,更新的值就在那里。 $stmt->affected_rows也适用于其他地方。我遇到的问题是,我想检查所有填写的字段是否都已更新,但即使字段更新,affected_rows也始终返回0。

这是否与我使用一系列项目更新这一事实有关?

我希望有人可以解决这个问题。

1 个答案:

答案 0 :(得分:2)

affected_rows仅适用于上一个execute。试试这个:

public function addTranslation( $data = array(), $language ) {
    // Add all words to language
    $stmt = $this->_db->prepare("UPDATE `languages` SET `$language` = ? WHERE `id` = ?");
    $stmt->bind_param('si', $translation, $id);

    $count = 0;
    $affected = 0;
    foreach( $data as $id => $translation ) {
        $stmt->execute();
        $affected += $stmt->affected_rows;

        if( !empty( $translation ) ) {
            $count++;
        }
    }

    // Check if all filled in words are added
    echo $affected;
    if( $affected >= $count ) {
        return true;
    } else {
        return false;
    }
}