2012-11-29 3 views
2

나는 PHP에 초보자이다. mysql 테이블에 값을 삽입하는 PHP 파일이 있습니다. 따라서 이것이 자주 발생하는 효율성을 감안할 때 PHP 파일에서 mysqli_prepare 문을 사용하기로 결정했습니다.mysqli가 PHP에서 매번 prepared statement를 피하는 방법

이 PHP 파일이 실행될 때마다 궁금해하며, 불필요한 부담이 될 수있는 진술을 준비하게됩니다. 진술서를 한 번만 작성하여이를 피할 수있는 방법이 있습니까? 아니면 준비된 진술의 개념을 놓치고 있습니까?

$query = 'INSERT INTO tbl (param, new_param) VALUES (:param, :new_param)'; 
$stmt = DB::prepare($query); 

foreach($data as $param => $new_param) 
{ 
    $stmt->execute(':param' => $param, ':new_param' => $new_param); 
} 

을 OR이

DB::query("INSERT "); // PDOChild::getInstance()->query("INSERT "); 

처럼 당신은 데이터를 삽입하는 경우 :

감사합니다, Marutha

+1

준비된 문장을 만드는 간단한 작업은 부담이되지 않습니다. 이걸 어디서 배웠 니? – Charles

+0

나는 초보자입니다. 준비된 진술에 대한 위키 백과 문서를 읽으십시오. 나는 준비된 구문이 DBMS에 의해 최적화 된 컴파일 된 쿼리를 구문 분석하고 나중에 실행을 위해 캐시에 보관되어야한다고 읽었습니다. 그래서 나는 성명서를 준비 할 때 DBMS에 의해 파싱되어 매 시간마다 준비하는 것이 비용이 많이들 것이라고 생각했습니다. 이것이 어떻게 다루어 지는지 몇 가지 정보를 던질 수 있다면 고맙겠습니다. – Marutha

+0

MySQL의 경우 준비된 명령문은 명령문 핸들이 열려있는 동안에 만 지속됩니다. 아마도 저장 프로 시저를 생각하고 있습니까? SQL 구문 분석과 쿼리 계획 생성이 비교 대상이 될 수 있으므로 저장된 프로 시저에서 대부분의 작업을 수행하는 것이 가장 좋습니다. 그 이후로 10 년이 넘었습니다. 당신이 알기 전까지, 측정 가능한 * 사실에 대해서, 당신의 쿼리 작성 방법은 성능에 부담이되며, 아무런 댓가를 치르지 마십시오. 멋진 값 자리 표시 자에 대해 준비된 문을 사용하고 데이터의 색인이 생성되었는지 확인하십시오. – Charles

답변

1

mysqli_query

하지만 PDO 사용하고 내 코드는 다음과 같다 사용자 입력해야 문을 준비하는 중 ...

+0

전체 코드를 게시 할 수 있습니까? 코드가 자주 실행되면 DB :: prepare ($ query)를 자주 호출해야합니다. – Marutha

+0

@Maruthavanan DB 클래스의 전체 코드 또는 DB :: prepare ($ query) 메서드의 전체 코드? –

0

스크립트에 변경 가능한 정보가 포함되어 있지 않은 경우 SQL 결과 캐싱 또는 전체 PHP 스크립트 출력 (페이지 캐시) 캐싱을 고려할 수 있습니다.

캐싱에 대한 자세한 내용은 here을 참조하십시오.

ZendFramework, Symfony, Kohana와 같은 종류의 PHP 프레임 워크를 사용하는 경우 대개보다 유연한 캐싱 처리기가 있습니다.

관련 문제