3

其他人也问过这个问题,但我的更具体一点。

我有这个查询:

$sql = "UPDATE table SET option=? WHERE number=?";
$q = $conn->prepare($sql);
$q->execute(array($option, $number));
$q->setFetchMode(PDO::FETCH_BOTH);

echo $q->rowCount();

如果 WHEREnumber已经存在且 SEToption相同,则$q->rowCount()等于0

如果 WHEREnumber不存在且行不更新,则$q->rowCount()等于0

如何区分这些非更新?

4

4 回答 4

8

在最近的 PHP 版本中,它由PDO::MYSQL_ATTR_FOUND_ROWS属性控制。当设置为 时true,根据文档,效果是:

Return the number of found (matched) rows, not the number of changed rows.
于 2012-05-23T22:44:56.917 回答
0

如果存在,会更好地检查吗?我在我的 miniclass 中使用一个通用函数来管理 PDO,但我不知道是否是最好的解决方案,因为多做一个查询......

function checkExistsInDatabase($id, $table, $where = null){

    // Connect
    $Database = Database::connect();

    // Query
    $sql = "SELECT id 
            FROM $table
            WHERE id = :id $where
            LIMIT 1";
    $params = array(
                ':id' => array(
                    'value' => $id,
                    'type' => 'int'
                )
              );
    $q = $Database->query($sql, $params);

    // Ha encontrado algo?
    $resultados = $Database->fetchArray($q);
    if(count($resultados) === 1){
        return true;
    }else{
        return false;
    }

}
于 2012-12-30T14:41:02.273 回答
0

您可以尝试使用REPLACE,它的工作方式类似于插入,但如果该行已经存在,则它首先被删除然后插入。这从mysql方面过度工作

于 2012-05-23T22:43:34.130 回答
-1

添加这个:

$db = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));

到您的 databasefunctions.php 文件的第一个“try {”部分

于 2020-09-17T06:58:29.577 回答