.xlsx 파일을 웹사이트에 업로드하고 배열로 읽어온 다음 ms sql 서버에 삽입하고 있습니다. 입력 파일에 작은따옴표가 포함되어 있지 않으면 코드가 완벽하게 실행됩니다. 문제는 삽입 문이나 배열 내부에서 작은따옴표를 이스케이프 처리해야 하는데 어떻게 해야 하는지 잘 모르겠습니다. Excel 파일 배열의 작은따옴표로 인해 삽입이 실패하지 않도록 하려면 어떻게 해야 합니까?
protected function excel_to_assocative_array($file) { try { $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($file); $reader->setReadDataOnly(false); $reader->setReadEmptyCells(false); $spreadsheet = $reader->load($file); $worksheet = $spreadsheet->getActiveSheet(); $values = $this->get_worksheet_values($worksheet); return $values; } catch(\Exception $e) { return new \WP_Error(500, 'Failed parsing Excel file.', 'executor'); } } protected function insert_into_database($data) { $map = "company_map"; $map = $map(); $database_ready_data = $this->map_headers($map, $data); $database_ready_data = $this->add_fields($database_ready_data); if(is_wp_error($database_ready_data)) { return $database_ready_data; } $dsn = ''; $user = ''; $password = ''; try { $dbh = new \PDO($dsn, $user, $password); } catch (\PDOException $e) { return new \WP_Error(500, "Could not connect to the database. ({$e->getMessage()}"); } $column_names = implode('],[', array_keys($database_ready_data[0])); $values = array_map(function($value) { return "'" . implode("', '", $value) . "'"; }, $database_ready_data); $values = "(" . implode("), (", $values) . ")"; $sql = new SQL("INSERT INTO {$this->company_db_tables[$this->company]} ([{$column_names}]) VALUES {$values}"); print_r($sql); $stmt = $dbh->prepare($sql->get_clause()); try { $stmt->execute(); } catch(\PDOException $e) { return new \WP_Error(500, __('Something went wrong, please contact your site administrator.', 'executor')); } return true; }
이제 PDO를 이미 사용하고 있으므로 가장 좋은 접근 방식은 이스케이프된 매개변수와 함께 PDO 준비된 문을 사용하는 것입니다.
execute()
두 개의 매개변수(예: 자리 표시자가 있는 SQL 쿼리)를 전달합니다.및 이러한 자리 표시자에 포함될 값입니다.
으아아아