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

挿入のように機能するREPLACEを使用してみることができますが、行がすでに存在する場合は、最初に削除されてから挿入されます。これはmysql側からの過労があります

于 2012-05-23T22:43:34.130 に答える
0

存在するかどうかを事前に確認する方がよいでしょうか?私はPDOを管理するためにミニクラスでこれに共通の関数を使用していますが、1つのクエリをさらに作成するため、それが最善の解決策であるかどうかはわかりません...

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 に答える
-1

これを追加:

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

databasefunctions.phpファイルの最初の「try{」部分に

于 2020-09-17T06:58:29.577 に答える