MySQLi의 준비된 문 말하자면 나는 현재 (MySQLi에서의 이동) PDO를 배우고는, '짜증나'라고 할 수 있습니다. 그러나 이전에는이 수준의 PDO를 완전히 실험 해본 적이 없습니다. 여러 함수를 포함하는 PDO 데이터베이스 클래스를 만들려고 시도 중입니다. 함수에서 제공된 정보를 사용하여 쿼리를 작성합니다.배열의
이 테이블에서 행을 삭제하는 데 사용됩니다 내 삭제() 함수입니다 : 당신이, 내가 매개 변수에서 배열의를 내파하고있는 MySQL의 문 내부에 다음에서 볼 수 있듯이
public function delete($table, $where = array(), $limit = '') {
$holders = array();
$params = array();
foreach($where as $field) {
$holders[] = '?';
}
foreach($where as $field => $value) {
$value = $value;
$clause[] = "$field = " . implode('', array_values($holders )) . "";
$params[] = $value;
}
$table = $this->prepend_table($table);
$sql = "DELETE FROM {$table} WHERE " . implode('AND ', $clause);
if(!empty($limit)) {
$sql .= " LIMIT {$limit}";
}
try {
$stmt = $this->connection->prepare($sql);
$stmt->execute($params);
return true;
} catch(PDOException $e) {
die('Query Error: ' . $e->getMessage());
exit;
}
}
작성된 쿼리를 준비하고 실행합니다. 내가 위에서 가지고있는 것처럼 매우 위험하고 내가 PDO에 대한 '탈출'을 사용하는 것을, -
지금 내 앞의 질문에, 누군가가 준비 진술과 내파()를 사용하는 방법에 대해 언급했다. 이제, MySQLi가 real_escape_string을 가지고 있다는 것을 알고 있었지만, 삭제 (및 다른 기능들)로 작업하고 가능한 한 보안을 유지하기 위해 어떻게해야할까요?
PDO를 처음 접했을 때 수표가 누락 된 경우 (또는 보안을 유지하기 위해 할 수있는 다른 방법이없는 경우) 알려 주시기 바랍니다. 일단 완료되면 코드 검토를 요청할 것입니다. 기지가 안전하다는 것을 확인하기 위해 수업을 들으십시오.
당신은 $의 limit' 숫자 값이 '것을 유효성을 검사 할 수 있습니다 '$ table'은 정당한 테이블 이름입니다 ('prepend_table' 함수가 그렇게 할 수 있습니다). 하지만 이스케이프 측면에서 쿼리 매개 변수를 사용하는 경우 해당 필드를 벗어날 필요가 없습니다. 그것은 일종의 쿼리 매개 변수 사용의 요점입니다. 어쨌든 요점의 상당 부분. – Spudley
당신 스스로 뭔가를하려고하는 것이 좋습니다. 이것은 내가 몇 년 전에 나에게 그것을 시도했을 때 생각 나게한다. (그것은 작동하지만 여전히 구문은 복잡하다. (참고 pastebin) (http://pastebin.com/rvqWLpjs)). 나는 완전히 새로운 클래스를 작성하여 Laravel의 querybuilder 클래스와 같은 쿼리를 작성했다. [Doctrine] (http://www.doctrine-project.org/)을 살펴 보거나 다른 오픈 소스 PDO 랩퍼를 자신의 프로젝트에 대한 참조로 사용하라고 제안합니다. 내가 제대로 이해한다면 –