약 1 주일간 검색 한 결과 나는 결정적/효율적/최대 날짜/표준 방법을 찾지 못하는 것 같습니다.동급 솔루션에서 클래스 정의 명령
명백한 해결책은 쿼리를 실행하여 결과를 변수로 가져오고 다음 쿼리를 준비 할 때까지 정리하는 것입니다. 연결을 종료하지 않는 것이 효율적입니다.
이것은 select/update/insert가있는 래퍼 클래스에서 수행됩니다.이 래퍼 클래스는 차례로 mysqli multi_query()에 대한 쿼리를 호출하므로 이상적으로 쿼리/이전에 어떤 일이 발생했는지 걱정하지 않고 쿼리가 실행되는지 확인합니다. 일부 솔루션에서 결과 세트가 필요하기 때문에 가능하지 않습니다.
현재 선택/업데이트/삽입 호출 : 결과 집합을 처리 후
private function queryclearup($dataresource) {
//clear up if required
switch ($this->dbtype) {
case "mysqli":
@mysqli_next_result($this->connection);
@mysqli_free_result($dataresource); //clear result to avoid out of sync issues
break;
}
}
- 예를 선택하는 경우의 데이터 배열로 변환하거나 업데이트의 경우에 오류를 로깅/insert.
여전히이 문제는 일부 (업데이트)에서는 유지되지만 다른 부분에서는 나타나지 않습니다 (선택/삽입).
public function select($query, $args = array()) {
$this->loghelper->write("SQL Select\n" . $query);
$args = _PHP::array_defaults($args, array(
"pk" => null
));
$data_table = array();
$errors = null;
$query = utf8_decode($query);
switch ($this->dbtype) {
case "mysqli":
$dbdata = $this->query($query);
$data_table = $this->resourceToDataTable($dbdata, $args);
break;
}
return $data_table;
}
그런 다음
private function resourceToDataTable($dataresource, $args = array()) {
$data_table = array();
if (gettype($dataresource) == "resource" || gettype($dataresource) == "object") {
do {
switch ($this->dbtype) {
case "mysqli":
$row = $dataresource->fetch_assoc();
break;
}
if ($row) {
array_push($data_table, $row);
}
} while ($row);
if (!empty($args["pk"])) {
$pktable = array();
foreach ($data_table as $d) {
if (!array_key_exists($args["pk"], $pktable)) {
$pktable[$d[$args["pk"]]] = $d;
}
}
$data_table = $pktable;
}
}
$this->queryclearup($dataresource);
return $data_table;
}
필요 뭐죠 것으로 보인다. 다른 사람이 있다면 어떨까요? –
그들은 선택을했다면 이미 루핑되었지만 다른 것은 부울 이어야만합니까? – Datadimension