내 코드에서 요청을 보호하고 싶습니다.PDO exec (array())를 여러 피연산자와 함께 사용하십시오.
오늘 내 curent 함수는 다음과 같습니다.
public function UpdatePMS($table,$data,$where) {
$ret = array();
$set_data = "";
foreach($data as $key => $value){
$set_data .= $key."= '".$value."', ";
}
if (isset($where)) {
$where = "WHERE ".$where;
}
$sql = "UPDATE ".$table." SET ".$set_data."".$where;
$sql = str_replace(", WHERE", " WHERE", $sql);
$stm = $this->db->prepare($sql);
$ret = $stm->execute();
return $ret;
}
이렇게하면 테이블, 데이터 및 조건을 모두 선택할 수 있습니다. 예를 들어 :
WHERE id = 1 and status < 10
또는 단지
WHERE id = 10
또는 때때로
WHERE id = 1 and status >= 5
변경할 수있는 곳의 내용. 일종의 보편적 인 요청입니다. 삭제, 업데이트, 선택, 삽입과 동일합니다.
나는 이렇게하려고 시도했지만 작동하지 않습니다.
$db = new PDO('mysql:host=localhost;dbname=asterisk','root','');
$table = "my_table";
$where = "WHERE id = 1";
$sql = 'SELECT * FROM :table :where';
$stm = $db->prepare($sql);
$stm->execute(array(":table" => $table, ":where" => $where));
$ret = $stm->fetchall(PDO::FETCH_ASSOC);
아이디어가 있으십니까?
는 ** 테이블 및 열 이름은 PDO의 매개 변수로 대체 할 수 없습니다. ** –
준비된 문은 당신의 쿼리가 안전하게 만드는 마법의 지팡이 아니다 prepare()를 호출하여 호출합니다. 따라야 할 규칙이 있습니다. 그리고 불행히도 열과 필드 이름에 대해 PDO는이를 안전하게 만드는 방법을 제공하지 않으므로 수동으로 화이트리스트를 만들어야합니다. –
좋아, 그래서 내가 다른 요청 당 하나의 기능을 만들 필요가 있습니까? – Danard