2010-05-17 7 views
0

나는 이것이 블론드하게 분명하기를 바랍니다. 문자열의 반복 요소를 주어진 배열의 요소로 대체하는 가장 빠른 방법을 찾고 있습니다. SQL 조회 W 매개 변수 대체의 경우.반복되는 문자를 PHP의 배열 요소로 대체하십시오.

$query = "SELECT * FROM a WHERE b = ? AND c = ?"; 
$params = array('bee', 'see'); 

여기에서 인스턴스를 바꾸시겠습니까? 나는이 preg_replace_callback을 사용하여 수행 할 수 있지만이 가장 빠른 방법입니다 아니면 내가 뭔가를 분명 실종 볼

SELECT * FROM a WHERE b = 'bee' and c = 'see' 

: 그래서 해당 순서 배열 요소와?

편집 : 나는 이미 위의 내용을 달성하는 준비된 문을 사용하고 있습니다. 디버그 출력의 일부로 표시되도록 원시 쿼리를 다시 가져 오는 방법을 찾고 있습니다.

답변

1

PDO to do your SQL queries을 사용하십시오. 매개 변수화 된 쿼리를 수행하므로 사용자 고유의 메서드를 롤 할 필요가 없습니다.

더 일반적인 방법은 sprintf()을 참조하십시오. 데이터를 안전하게 이스케이프 처리하지 않으므로 데이터베이스 액세스에는 사용하지 마십시오.

+0

물론 데이터베이스 항목에는'sprintf'를 사용할 수 있지만 [mysql_real_escape_string'] (http://php.net/manual/en/function.mysql-real-escape-string.php)은 매개 변수를 탈출하십시오. –

+0

나는 "할 수 없다"는 말을하지 않았습니다. 이것은 무의미한 휠 재조림이 될 것이고 이미 PHP에 좋은 매개 변수가있는 쿼리 시스템이 있습니다. – Quentin

2

prepared statements을 찾고 계십니까?

<?php 
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?"); 
if ($stmt->execute(array($_GET['name']))) { 
    while ($row = $stmt->fetch()) { 
    print_r($row); 
    } 
} 
?> 
+0

David & Dominic : 감사합니다. 이미 위의 내용을 달성 할 준비가 된 진술을 사용하고 있습니다. 디버그 출력의 일부로 표시되도록 원시 쿼리를 다시 가져 오는 방법을 찾고 있습니다. –

1

@David Dorward가 이미 제시 한대로 PDO를 사용하는 것이 좋습니다. 그런 다음 : 당신은, % D % s을 (를) 대체된다 당연히

function do_substitution($query, $params) { 
    $params = array_unshift($params, $query); 
    $query = call_user_func_array('sprintf', $params); 

    return $query; 
} 

:

$stmt = $dbh->prepare('SELECT * FROM a WHERE b = ? AND c = ?'); 
$stmt->execute(array('bee', 'see')); 
0

나는 한 번 내가 대체 이런 종류의 일을하는 멋진 방법이라고 생각하는 상속 코드베이스에 다음을 발견 등이 이런 방식으로 표시됩니다.

+0

감사합니다. 가장 빠른 방법은 직선 루프와 'strpos'인 것처럼 보입니다. 검색어에는 3-5 개 매개 변수가 거의 없습니다. –

0

물어 본 지 몇 년 후에 발견되었습니다. 다른 사람이보고 있고 다른 대답에 만족하지 못하는 사람에게. 이것이 내가 그 일을 끝내는 방법입니다.

참고 : 이것은 디버깅 전용이며 데이터 정리는 수행하지 않습니다.

각 매개 변수의 의도 된 데이터 형식을 알고 있으면 값 주변에 따옴표를 추가 할 수 있습니다. 이것은 sqlsrv_query ($ conn, $ query, $ params)와 같은 것을 사용할 때 자동으로 생성됩니다.