programing

실행문 중 PDO가 영향을 받는 행이었습니다.

css3 2023. 8. 28. 21:19

실행문 중 PDO가 영향을 받는 행이었습니다.

PDO에 대해 exec 문을 사용하는 방법을 많이 찾았지만 도움이 될지 모르겠습니다.제가 알기로는 준비된 문장은 execute() 함수를 사용해야 합니다.사용자 입력의 데이터로 행을 업데이트하고 있으므로 query() 호출 대신 준비된 문을 사용하고 싶습니다.

내 코드는 다음과 같습니다.

$dbh = buildDBConnector(); 
$sql = "UPDATE tb_users 
    SET authState=1
    WHERE id = ? AND authPass = ?";
$q = $dbh->prepare($sql);
$f = $q->execute(array($id,$authPass));
if($f){
    echo '<br />Success<br />';
}else{
    echo '<br />Failure<br />';
}

문제는 쿼리 자체가 오류가 없고 정상적으로 실행되므로 $f에 저장하는 데 실패하지 않는다는 것입니다.하지만 실제로 업데이트할 행을 찾아서 성공적으로 업데이트했는지 알아야 합니다.즉, 영향을 받은 행이 필요합니다.구글 등을 검색할 때는 계속해서 exec 문이 나오는데, 내가 알기로는 exec은 준비된 문이 아닌가요?좋은 의견이라도 있나?

Try.Prepared 문은 해당 방법을 통해 영향을 받는 행의 수를 반환합니다.

참고: 동일한 값으로 표를 업데이트하는 경우rowCount()항상 돌아올 것입니다.0이것은 정상적인 동작입니다.다음 속성을 가진 PDO 개체를 만들어 PHP 5.3부터 직접 변경할 수 있습니다.

<? php
$p = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
?>

rowCount()그러면 업데이트 검색기가 실제로 발견하거나 검색한 행 수를 반환합니다.

$q->rowCount() 마지막(실행된) SQL 문의 영향을 받는 행 수를 반환합니다.$q종종 불리는 준비된 진술입니다.$stmt.

따라서 이 문서를 읽는 대부분의 사용자는 다음과 같은 것을 원할 수 있습니다.

$pdo = new PDO($dsn, $username, $password);
$sql = "UPDATE tb_users  SET authState=1 WHERE id = ? AND authPass = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute(array($id, $authPass));

if ($stmt->rowCount()){
    echo 'Success: At least 1 row was affected.';
} else{
    echo 'Failure: 0 rows were affected.';
}

PDO의rowCount()준비된 문에서 영향을 받는 행을 반환합니다.UPDATE,DELETE또는INSERT진술.그렇지 않으면 반환된 행 수를 반환합니다.SELECT진술.

파라비타 케 라 라 라 라 라 라 라 라 라 라디라시온 레토른 0, 데베라시 아냐디르 골 결승전 데 라 카데나 데 코넥시온.코넥시온.php

<?php $cadena = "$manejador:host=$servidor;dbname=$dbname";
    $cnx = new PDO($cadena, $usuario, $pass, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
?>

class.class.class.

<?php
 ...
 global $cnx;
 $pre = $cnx->prepare($sql);
 $pre->execute($parametros);
 $rpta = $pre->rowCount();
 return $rpta;
?>

PDO rowCount()는 항상 0을 반환하기 때문에 단일 UPDATE 쿼리가 있는 MySQL에서는 쓸모가 없다고 생각합니다.

ex:
TABLE{id=1, col1="A"}
UPDATE  TABLE SET col1="AA" WHERE id=1;
rowCount will return 0;

also
UPDATE  TABLE SET col1="AA" WHERE id=999;
rowCount will return 0;

so rowCount() is useless in this case.

이 쿼리로 아직 테스트하지 않았습니다. UPDATE TABLE SET col1="AA"

언급URL : https://stackoverflow.com/questions/10522520/pdo-were-rows-affected-during-execute-statement