2011-11-28 2 views
7

나는 준비된 문을 작성하는 내 PHP 스크립트에서 같은 변수 $stmt를 재사용되었습니다Prepared Statement가 캐시되고 있는지 어떻게 알 수 있습니까?

$stmt = $dbh->prepare("SELECT column_A FROM Table1 WHERE id=?"); 
$stmt->bindValue(1, $id, PDO::PARAM_INT); 
$stmt->execute(); 
.... 

$stmt = $dbh->prepare("UPDATE Table2 SET column_B=? WHERE column_A=?"); 
$stmt->bindValue(1, $name); 
$stmt->bindValue(2, $column_A); 
$stmt->execute(); 

내 질문은, 두 개의 문 캐시와에 기록되고 있는지 어떻게 알 수 있습니까 두 번째 문은하지 않았다 두 문장 모두 동일한 변수 이름을 공유하지만 첫 번째 문장을 덮어 씁니까?

+0

뭔가 새로운 것을 가르쳐 주겠다. –

답변

2

문은 데이터베이스 엔진이 아니라 PHP에 의해 준비가되어 있습니다, 참조 :

그래서 MySQL은 "캐시"를 준비 무효화되지 않습니다 PHP에서 같은 변수 이름을 재사용.

+1

'setAttribute (PDO :: ATTR_EMULATE_PREPARES, false)'또는 참 및 거짓 모두에 적용 가능한 경우에만 적용 할 수 있습니까? –

+0

링크에서 "주어진 이름을 가진 준비된 명령문이 이미있는 경우, 새로운 명령문이 준비되기 전에 암시 적으로 할당이 해제됩니다." 'stmt_name'이 MySQL에 의해 할당되고 PHP 변수 이름에서 가져온 것이 아닌지 어떻게 알 수 있습니까? –

+0

@ BenHuh : 솔직히, 나는 잘 몰라. 내 생각 엔'stmt_name'은 SQL 쿼리 자체에서 PHP에 의해 계산 된 일종의 해쉬입니다. 나는 MySQL 문서와 PDO/mysql 소스 코드를 간략하게 살펴 보았고 어느 방향 으로든 그 점을 찾을 수는 없었지만 MySQL 로그가 유용한 정보를 제공 할 것이라고 생각한다. –

0

그렇지 않습니다. 그러나 변수를 재정의하는 것은별로 변하지 않습니다. 변수에 새로운 값을 할당하고 아무것도 편집하지 않습니다.

관련 문제