PDO의 자동 제출 기능은 자동 커밋이 꺼진 MySQL에서 활성화됩니다.
P粉011912640
P粉011912640 2023-08-08 15:23:46
0
1
459
<p>저는 PDO만 사용하는 레거시 PHP 코드 베이스에 배정되었습니다.

연결은 다음 패턴을 사용하여 수행됩니다.


; <pre class="lang-php Prettyprint-override"><code>// MySQL 데이터베이스에 연결 $con = new mysqli($host, $user, $password, $database); // 연결 확인 if ($con->connect_error) { die("연결 실패: " . $con->connect_error); } $con->자동 커밋(true); <p>그리고 해당 자동 커밋(true)을 사용하면 MySQL 서버가 SET autocommit = 0으로 구성된 경우에도 예상대로 작동합니다. </p><p>이제 일반 SQL에서 준비된 명령문으로 마이그레이션하려고 하므로 다음과 같이 작성했습니다.</p><p><br /></p> <pre class="lang-php Prettyprint-override"><code>$dsn = "mysql:host=$host;dbname=$database"; $pdo = 새 PDO($dsn, $user, $password); $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, true); $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); <p>아래의 예제 함수</p> <pre class="lang-php Prettyprint-override"><code>함수 updateTeam($pdo, $name, $id) { 노력하다 { $데이터 = [ '이름' => $이름, 'id' => $id ]; $sql = "업데이트 팀 SET 이름 = :name WHERE id=:id"; $stmt = $pdo->prepare($sql); $stmt->실행($data); // $pdo->커밋(); } 잡기(PDOException $e) { db::$pdo->롤백(); error_log('실패: ' . $e->getMessage() ); } 잡기 (예외 $exc) { db::$pdo->롤백(); error_log('실패: ' . $exc->getMessage()); } } <p>제출하지 마세요. 작동하려면 $pdo->commit();의 주석 처리를 제거해야 하는데, 응용 프로그램의 모든 쿼리 문을 변경해야 하기 때문에 원하지 않습니다.

PDO 구성에서 무엇을 놓쳤나요? 나는 var_dump($pdo->query('SELECT @@autocommit')->fetchAll()); 을 시도했고 결과는 </p><p><code></code>< /p> <pre class="brush:php;toolbar:false;">array(1) { [0]=> array(2) { ["@@autocommit"]=> [0]=> 문자열(1) "0" } }</pre> <p><br /></p>

P粉011912640
P粉011912640

모든 응답(1)
P粉799885311

PDO의 자동 커밋은 MySQL의 자동 커밋과 다릅니다. 즉, MySQL 구성에서 자동 커밋 값을 기본값을 0으로 설정하면 PDO::ATTR_AUTOCOMMIT의 기본값이 변경되지 않습니다. PDO::ATTR_AUTOCOMMIT의 기본값은 항상 true입니다.

PDO::ATTR_AUTOCOMMIT 값을 동일한 값으로 변경하거나 부울 또는 정수가 아닌 다른 값으로 변경하면 무시됩니다. 즉, 두 작업 모두 무작동입니다.

으아악

PDO::ATTR_AUTOCOMMIT를 비활성화하고 활성화하여 속일 수 있습니다.

으아악

이것은 MySQL 서버를 두 번 호출하고 MySQL 자동 커밋 값을 1

로 설정해야 합니다.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!