Data Modeling – Relationships in SQL (Part 3)

이제 우리가 만든 것은 우리가 만든 것입니다 테이블로 변환 할 수있는 데이터베이스 모델입니다

좋아, 이제 우리가 할 다음 일은 SQL 이런 종류의 일을 성취하는 테이블을 만들 수 있습니다 그리고 함께 갈 수 있습니다 관련된 유인물이 있어야하거나 슬라이드를 가져갈 수 있습니다 phpMyAdmin에서 실행할이 SQL의 일부를 잘라내어 붙여 넣거나 SQL 가제트가 무엇이든간에 그래서 데이터베이스를 만들 것입니다

우리는 Music이라는 데이터베이스를 만들 것입니다 그래서이 것들을 사용하여 데이터베이스를 만들고, 실행중인 다른 데이터베이스와 별도로 유지하십시오 그래서 우리는 일련의 create table statement를 실행할 것입니다 우리는 아티스트에서 트랙으로 바깥쪽으로 일할 것입니다 그래서 우리는 우리의 잎을 확립해야합니다

우리가 들어가기 전에 작은 그림 그래서 우리는이 창조 진술에 대해 바깥에서 자신의 길을 만듭니다 그래서 우리는 테이블을 생성 할 것이고 이것은 테이블 생성과 동일합니다 우리는 좀 더 구체적인 것들을 사용하기 시작할 것입니다 CREATE TABLE 아티스트,와, 돌아와

CREATE TABLE 아티스트, CREATE TABLE 아티스트 및 기본 키 이제 데이터베이스에서 기본 키를 관리해야합니다 우리는 그것을 자동으로 증가시키고 제공하도록 말할 것입니다 즉 검색 문장에 이들을 넣을 필요가 없기 때문입니다 그들이 삽입 될 때 우리에게 주어진

이 코드를 코드에서 실행하면 명령문을 삽입 한 다음, 무슨 열쇠를 얻었나요? 그리고 그건 괜찮을거야 그래서 예술가는 이름을 가지고 있습니다 좋습니다 그래서이 모든 것, INTEGER NOT NULL AUTO INCREMENT KEY, 데이터베이스와 통신 중입니다 이것을 우리를 위해 관리하고, 정수로 만들고,이 숫자에 계속 추가하십시오

우리가 무언가를 넣을 때마다이 번호에 하나를 더하십시오 그런 다음 앨범이라는 표를 만듭니다 기본 키인 album_id가있을 것이고 논리적으로 사용할 수 있습니다 핵심 제목을 지정하면 특정 방식으로 제목을 색인화 할 것입니다 BTREE 인덱스는 전체 문자열을 찾는 데 유용한 인덱스입니다

문자열 접두사 및 정렬 그래서 우리는 제목별로 정렬하고 싶을 것입니다 BTREE 색인을 사용할거야 알았지? 이것이 논리적 키임을 나타냅니다 원할 경우 하나 이상의 논리 키를 가질 수 있습니다

그리고 이제 우리는 외래 키를 넣습니다 그래서 artist_id는 그 화살표 중 하나의 시작점입니다 우리는 그것을 정수라고 부릅니다 이제 우리가하는 또 다른 일은 MySQL과 통신하는 것입니다 그리고 이것은 다른 데이터베이스가 일을 다르게하는 곳입니다

그래서 이것은 MySQL의 고유 한 구문입니다 특정 구문, 기본적으로 제약 조건을 추가합니다 그리고 이것은 외래 키 제약 조건이라고 말합니다 내 열 artist_id는 참조입니다 테이블 아티스트의 artist_id 필드에 외래 키

여기서 일어나는 일은 당신이 데이터베이스에 말하고 있다는 것입니다, MySQL에게, 레코드를 삽입 할 때, 찾고있을 때 아티스트 ID, 2, 4 또는 4와 같은 숫자를 넣을 때 다섯,이 테이블에 있는지 확인하려고합니다 아티스트 그리고 그것이 존재하지 않는다면, 그것은 당신에게 소리지를 것입니다 그건 당신이 제약 조건을 위반하게하지 않을거야 이제 당신은 같아요, 그것은 의미심장합니다 아니요, 당신은 제약 조건을 넣는 사람입니다

그래서 당신은 제약 조건을 넣고 있습니다 이것은 데이터베이스에 나는 내 자신을 강요하기로 결정했다 제약 조건을 원하지 않는다면 그 제약 조건을 넣지 마십시오 그러나 우리가 이것을 외래 키로하고 싶기 때문에 우리는 그것을 일종의 책임있는 태도, 우리는 기본적으로이 점을 지적합니다 그리고이 artist_id 열에 넣은 숫자는 무엇이든 주장합니다

거기에 대응하는 행이 있다는 것입니다 이제 DELETE DELETE UPDATE 및 ON CASCADE ON DELETE CASCADE에 대해 설명합니다 CASCADE 업데이트시, 우리가 통신하고있는 것은, 특정 행이 삭제 된 경우 artist_id 행 이 아티스트 표에서이 표의 모든 행과 해당 artist_id가있는 모든 것을 삭제하십시오 ON DELETE CASCADE는 이것의 삭제가이 작업에 종속됨을 의미합니다 여기서 아티스트 ID는 해당합니다

이것이 데이터베이스를 깨끗하게 유지하는 방법입니다 우리는 나중에 그것에 대해 더 이야기 할 것입니다 동일한 내용이 ON UPDATE에 적용됩니다 그 숫자는 4 였고 우리는 그것을 24로 바꾸었고, 그 다음에 여기에 우리는 a, 나는 여기서 그런 혼란을 피우고있다 그래서 무언가가 있다면 여기에 4s의 무리가있었습니다

효과적으로 가리키고 있습니다 그래서 artist_id가 있습니다 우리는 어떻게 든이 테이블에 들어갔습니다 24 세가되면, 이것들을 모두 24로 바꿀 것입니다 그리고 이것이 ON UPDATE CASCADE의 의미입니다

이 artist_id 번호 이 테이블에서 업데이트되면이 테이블의 모든 해당 행에서 업데이트됩니다 그건 좀 더 드문 일입니다 4, 4, 4, 4 번 줄을 가져가는 경우는 드뭅니다 여기에는 4 개의 무리가 있고 여기에는 4 개의 줄이 있습니다 그리고이 행을 지우면이 모든 행을 지우고 정리합니다

그것은 훨씬 더 일반적인 것이고, 우리는 그것에 대해 잠깐 이야기 할 것입니다 이것은 모두 CREATE 문에 포함되어 있습니다 album_id, title 및 artist_id의 세 열이 있습니다 우리는 앨범의 기본 키이므로 album_id를 특별하다고 표시했습니다 title은 논리적 인 키이고 artist_id는 외래 ​​키임을 나타냅니다

그래서 우리는 그 모든 것을 모델링하고 있으며 우리는 MySQL에 노출되어 있습니다 당신은이 두 가지를 모두 무시할 수 있습니다 이들은 일종의 옵션이지만 일반적으로 데이터에 대해 알고있는 것을 더 많이 취할수록 어떻게 사용할지에 대한 힌트를 얻으면 더 똑똑한 것들이 해결됩니다 MySQL은 정말 똑똑하기 때문에 당신이 계획하고있는 것을 말하지 않는다면 당신이하고있는 일을 예견 할 수는 없습니다 그래서 우리가이 패턴을 취하면 우리는이 모든 다른 것들을 창조합니다

우리는 장르를 만들고, 트랙을 만들거야, 맞아 제목, 라디안 길이가 있습니다 기본 키 yada, yada가 있습니다 우리는 논리적 인 타이틀 키와 두 개의 외래 키 제약 조건이 있습니다 그리고 우리는 이런 것들을 연결시켜줍니다

우리 모두 끝나면 그 모든 것들이 모두있을 것입니다 그래서 우리는이 4 개의 테이블을 완전히 모델링합니다 우리는 MySQL에 외래 키를 완전히 알 렸습니다 맞습니까? 좋아, 근사하다 그래서 우리는 통과하고 모든 테이블을 만듭니다

우리는 올바른 순서로 생성해야합니다 왜냐하면 외래 키 제약 조건 테이블이 일찍 생성되었다고 가정합니다 따라서 실행 중일 때 앨범 테이블과 장르 테이블을 만들지 않은 경우 이 SQL은,이 SQL은 날려 버릴거야, 와우, 테이블 존재하지 않습니다 그럼 순서대로해야 해 나는 예술가, 앨범, 장르, 트랙을하기 때문에 그것들을 작동시키는 순서로 얻었습니다

당신이 그렇게하는 한 그들은 일종의 건축물이 될 것입니다 그리고 나서 MySQL은 여러분이 생성 할 때이 연결 웹을 만듭니다 그래서 너는이 모든 것들을 다뤄야 해 그리고 여기에 artist_id가 있습니다 그러면 null이 될 수 없습니다

자동으로 증가합니다 Yada, yada, 그리고 우리는 간다 색인이있는 경우, 네가 한 일은 여기에 나타나기 시작할거야 그러면 우리는이 모든 것을합니다 앨범, 아티스트, 장르가 있습니다

그런 다음 트랙 1을 만들 것입니다 이것이 모든 트랙 SQL입니다 그래서 우리는 그것을 할 것이며, 우리 모두 끝나면 우리는 우리의 궤적을가집니다 외래 키는이보기에 잘 표시되지 않지만이 및 그건 외래 키이고 멀리 갈 수 있습니다 MySQL은 그것들을 인식하고 그것을 insert 문에 적용 할 것이다

이제 데이터를 입력하기 시작합니다 그래서 우리가 할 첫 번째 일은, 우리는 또한 밖에서 일종의 데이터를 넣을 것입니다 그리고 그것은 예술가 인 제드 린 (Led Zeppelin)을 언급 할 때, 우리는 숫자가 무엇인지 알아야합니다 그래서 우리는 아티스트 테이블 Led Zeppelin에 삽입 할 것입니다 오른쪽, 아티스트 이름 열에 삽입하십시오

특히 누락 된 것은 기본 키입니다 그러나 그것은 데이터베이스에 의해 자동으로 수행되기 때문입니다 따라서 기본 키는 데이터베이스에 의해 자동으로 수행됩니다 그리고 여러분이 살펴 본다면, 우리가 요청한 두 개의 레코드를 삽입 할 것입니다 artist_id 양식을 지정합니다

맞습니까? 아티스트 ID가 할당 되었으니까요 오케이? 이제 우리는 이것을 압니다 이제 수동 작업에서, 당신은 이런 낙서를 지켜야 만합니다 Led Zeppelin은 1이고, AC / DC는 2입니다 이 일에서 다른 곳에서는 제드 린이라는 단어를 사용할 수 없기 때문입니다

그리고 우리는 Led Zeppelin에 속한 트랙을 만들 것입니다 Led Zeppelin에 속한 앨범 이제 프로그램에서 변수가 있습니다 기본적으로이 삽입물을 실행하고 x가 그 번호만큼 나에게 제공한다고 말할 수 있습니다 그리고 데이터베이스에 요청할 수 있습니다

그 삽입 후 방금 지정한 번호는 무엇입니까? 그러나 우리는 그것을 봐야 만합니다 우리는 슬로우 모션으로 손으로 직접하고 있습니다 그러나 프로그램이 그것을 할 때 그들은 같아요, 멍청이, 그 번호는 뭐였지? 그리고 숫자와 변수가 있습니다 그런 다음 나중에 insert 문에 그 번호를 넣을 수 있습니다 우리가 손으로 할거야

그리고 우리는 Led Zeppelin이 1이고 AC / DC가 2라는 것을 기억해야합니다 그래서 우리는 다시 시작할거야 우리는 장르를 할거야, 우리는 그것을 삽입한다 우리는 Rock and Metal으로 끝납니다 그래서 우리는 작은 숫자가 무엇인지 알고 있습니다

바위와 금속, 바위는 1, 금속은 2입니다 나는 이들이 무엇인지 기억조차하지 않는다 나는 종이 위에 적어 두지 않았다 아마 종이에 적어 두어야 할 것 같습니다 잠깐만, 내가 여기 종이 하나와 펜 하나를 가져다 주자

따라서 1은 제플린 (Led Zeppelin), 2는 AC / DC입니다 그리고 장르에서 1은 Rock이고 2는 Metal입니다 여기 내 변수가 있습니다 나는 이것을 종이로 조금 적어 보았다 이제 두 개의 테이블이 있습니다

나는 내 예술가와 내 장르를 가졌다 그래서 아직 외래 키를 만들지 않았습니다 우리는 아직 외래 키를 만들지 않았습니다 이제 앨범을 삽니다 그리고 앨범을 떠올리면 바로 artist_id라는 제목이 붙습니다

기본 키로 시작합니다 여기서 album_id가 기본 키입니다 걱정마, 자동으로 끝날거야 그렇지? 앨범도 우리가 앨범을 참조 할 것이므로 기본 키를 가져야합니다 그러나 artist_id는 우리가 앨범 테이블에 있기 때문에 앨범의 외래 키입니다

앨범 표 좋아, 그래서 우리는 명시 적으로 우리가 알고있는 사촌을 삽입해야한다 이 아티스트는 사용자 인터페이스의 어딘가에 속합니다 맞아, 우리는 AC / DC를 위해 무언가를 넣을거야 따라서 앨범에 넣을 때 artist_id라는 제목을 삽입해야합니다

우리는 우리를 위해 자동으로 앨범을 만들지 않아도됩니다 그런 다음 제목과 artist_id를 입력해야합니다 하지만 우리는 AC / DC를 넣지 않을 것이며, 우리는 2를 넣을 것입니다 왜냐하면 우리는 AC / DC가 실제로 2라는 것을 기억했기 때문입니다 그리고 우리가 artist_id1을 위해 Led Zeppelin을 할 때도 마찬가지입니다

그것은 아이러니합니다 그건 진짜 4가 아니야, 4 학년이야, 끈이야, 그렇지? 따라서 Led Zeppelin은 1이므로 기억합니다 우리가 이것을 PHP에서 돌리고 있다면, 우리는 달러 마지막 삽입 또는 이와 비슷한 것을 변수라고합니다 좋아요, 그래서 당신은 요점을 얻습니다 그리고 이것들은 단지 숫자가됩니다

이제 여기에 7 개를 넣으면 그것은 날아갈 것입니다 그것이 말하기 때문에, 나는 7 개의 아티스트 행을 가지고 있지 않습니다 그리고 그것은 제약의 일부입니다 그래서 당신은 합법적 인 숫자를 넣어 다른 테이블에 넣어야합니다 그래서 이러한 것들의 순서가 중요합니다

당신이 이러한 관계를 구축 할 때, 당신은 그 점에 당신이 가리키는 것을 놓습니다 그런 다음이 것을 넣고 가리 킵니다 그리고이 작은 녀석들을 모두 연결하고 있습니다 매혹적인 일이지만, 제대로 해줘야합니다하지만 효과가 있으면 영광입니다

그럼 까다로운 일이있어 모든 곡을 넣어야 해 알았어 그래서 우리는 앨범을 가지고 있습니다 다시 track_id가 기본 키이므로 다시 걱정하지 않아도됩니다

이 모든 물건, 트랙, 제목 길이, 평점 및 개수는 데이터 일뿐입니다 그리고 album_id와 genre_id, 그건 작은 화살표를 모델링하는 거죠? 그리고 Black Dog는 앨범에서 왔고, 기다리고, 앨범 번호를 잊어 버렸으므로 그 번호를 써야했습니다 그러나 무엇이든, 당신은 요점을 얻습니다 그래서 이것은 앨범 2, 앨범 2, 앨범 1, 앨범 1입니다 장르 1, 장르 1, 장르 2, 장르 2입니다

이제 나는 말하기 시작했다 하나 이상의 장소에서 문자열 데이터를 복제 할 수 없다고 말하면서 이제 앨범에 트랙이 두 개 이상 있기 때문에 데이터를 복제해야합니다 그래서 우리는 앨범을 두 번 넣어야합니다 여기 트랙이 있는데, 여기 트랙이 있고 그것은 같은 앨범에 있습니다 그들이 효율적이기 때문에 숫자를 복제하는 것은 완전히 끝내줍니다

줄은 나쁘고 숫자는 좋다 우리는이 모든 음모를 통해 요점에 도달했습니다 우리는 숫자를 문자열에 대한 프록시로 사용했습니다 그래서 당신은이 모든 것을하고 지금은 관계가 있습니다 그리고보기가 어렵지만 신중하게 모든 것을 다한다면, 당신은 이제이 작은 화살들을 효과적으로 재구성 할 수 있습니다

이 외래 키 열은 화살표의 시작점입니다 그리고 이것들은 조회입니다, 그렇죠? Rock으로 연결되는 링크, Rock 링크, Metal 링크, 이것은 금속에 연결됩니다 그래서 우리는 여기와 여기에서이 숫자들을 사용하고 있습니다 또한이 문자열에 대한 프록시로 여기에 있습니다 그것이 우리가 한 일입니다

우리는 그렇게하기 위해 열심히 일했습니다 [음악]

PHP36.0 Working with Databases from PHP

이제는 관계형 데이터베이스가 무엇인지에 대해 이야기하면서 시간을 보냈습니다 근본적으로 어떻게 작동하는지, 그리고 관계형 데이터베이스 관리를 설정하는 방법에 대해 이야기했습니다

시스템에 대해 알아 보도록하겠습니다 실제로 우리가 실제로 PHP 코드에서 이러한 데이터베이스로 작업하십시오 이 일을 할 수 있기 위해서는 우선 나는 아마도 내가해야 할 일이 될 것이다 나는 데이터베이스를 설정해야 할 것이다 실제로 MySQL Workbench를 시작한 상태에서 실제로 연습 할 시간을 가질 수 있습니다

여기에 신청하십시오 계속해서 실행중인 서버에 연결하겠습니다 여기에 localhost 일단 내가 실제로 그걸 열어 보면, 다 – PHP 데이터베이스 나는 이전에 만들었고 탭이있는 쿼리 탭으로 이동해야합니다 나는이 데이터베이스를 만들고 작업하기 위해 SQL 코드를 입력 할 수있다

만약 Workbench 도구를 열면 약간의 쿼리 창이 생기지 않습니다 여기, 작은 SQL * Plus 단추를 클릭하면 새 탭이 열립니다 여기서 입력 할 코드를 입력 할 수 있습니다 내가하고 싶은 일 PHP 데이터베이스로 작업하고 싶습니다 여기에 제 데이터베이스가 있습니다 굵게

너의 글자가 굵은 글씨가 아니라면 더블 클릭을한다 선택해야합니다 이 데이터베이스를 사용하면 여기서 작성한 모든 SQL 코드가 영향을 받게된다는 것을 이해하게 될 것입니다 그 특정 데이터베이스와 제가 무엇을하고 싶은지는 제가 테이블을 만들고 싶습니다 내 PHP 데이터베이스 내부에 우리가 함께 작업 할 수 있습니다

나는이 예제를 생각하고있다 어쩌면 상자 테이블, 테이블에 대한 정보를 저장할 수있는 테이블을 만들 것입니다 상자, 우리가 이전에했던 것처럼 그래서 내가 할 일은 내가 갈거야 테이블 상자를 만듭니다

나는 그 다음에 괄호 세트와 끝에 세미콜론 SQL 문 끝의 세미콜론은 당신은 많은 경우에 그것없이 도망 갈 수있을 것입니다 여기에 실제로 갈 때 내 박스 테이블 만들기이 특정 테이블에 어떤 필드가 있는지 알려 줄 필요가 있습니다 나는 밖으로 나가야 할 것입니다 그래서 저는 제가 필드를 원한다고 말함으로써 시작하겠습니다

호출 된 ID 및 해당 필드의 형식을 정수로 원합니다 그 특별한 분야 나 또한 그것을 null이되도록 허용하지 않으려면 Not null을 입력 할 것이고 데이터베이스를 원한다 해당 필드에 저장된 ID를 자동 증가 시켜서 내가 처리 할 수 ​​있도록 처리합니다 자동 증가를 넣는다 우리가 있습니다

내가 그것을 가지고 있으면 나는 앞으로 나아갈 것이다 해당 필드 정의를 쉼표로 구분하여 필드 정의와 다음 필드를 구분하십시오 나는 다음 일을 내가 생각할 것이다 내 상자에 대해 말하자면 너비를 정의하고 싶습니다 너비는 정수가 될 수도 있고 null 일 수 없습니다

나는 갈거야 null이 될 수없는 정수인 height라는 필드를 만든다 그리고 마침내 나는 color라는 필드를 만들 수 있습니다 색깔을 위해 나는 그것의 타입을 만들 것입니다 varchar – 가변 수의 문자; 나는 거기에서 50 문자까지 허용 할거야

아마도 null이 될 수 있도록 허용 할 것입니다 그래서 그것들은 내 상자 테이블의 일부가 될거야 내 탁자에 보관하는 모든 상자에는 너비, 높이, 색상 및 ID 등이 있습니다 그것들의 기본적인 정의에 덧붙여 fields 또한이 테이블의 기본 키를 원한다는 것을 데이터베이스에 알리려고합니다 신분증 이군

그러면 두 개의 상자가 동일한 ID로 끝나지 않게됩니다 그것은 항상 모든 상자에 고유 한 ID가 있는지 확인하십시오 일단 완료되면, 일단 코드를 작성하면 입력 한 다음 번개 기호를 클릭하거나 Ctrl + Enter를 누를 수 있습니다 또는 Command + Enter를 누르십시오 그렇게하면 필드가 아래쪽으로 아래로 튀어 나와 진술이 성공 여부

저의 스크린 가장자리에서 약간 벗어났습니다 그걸 끌어 올려 거기는 처음으로 내가 쳤을 때 테이블이 만들어진 여기서 녹색 체크 표시는 성공적으로 실행되었음을 의미합니다

0 행이 있다고 알려줍니다 영향을 받았지만이 문은 실제로 행을 넣을 의도가 아니기 때문에 괜찮습니다 탁자 나는 실수로 두 번째 시간을 실행했고 그 시간은 빨간색 X는 그 진술이 작동하지 않는다는 것을 알려줍니다 두 번째 문제 상자 표가 이미 실행 한 이전 명령문에 존재했기 때문입니다

그래서 나는 지금 박스 테이블을 가지고있다 사실, 내가 다가 오면 사이드 바를 마우스 오른쪽 버튼으로 클릭하고 내 Refresh all, PHP 데이터베이스의 테이블 섹션 아래 나는 지금 그것을 확장 할 수 있고 거기에 나의 실제 상자 테이블을 볼 수있다 어떤 열을 볼 수있게되어 실제로 그 테이블 안에 어떤 필드가 있는지 확인할 수 있습니다 그래서 우리는 실제로 우리가 실제로 연습 할 수있는 테이블을 가지고 있습니다 그것으로 연습하게하려면 테이블을 조금 더 재미있게, 우리가 나아가서 어떤 데이터로 작업한다면 어떨까요? 그 안에? 먼저 테이블에 약간의 데이터를 넣어 보겠습니다

나는 타이핑 할거야 상자에 삽입하면 내가 할 일은 괄호 안의 집합입니다 어떤 필드에 내가 채우기를 원하는지를 말하면, 단어 값을 넣을 것입니다 또 다른 괄호 세트는 내가 들어가기를 원하는 실제 값을 넣을 것이다 전지

그래서 저는 예를 들어 제가 값을 폭, 높이, 및 색상 필드를 입력 한 다음 값 뒤에 괄호 안에 원하는 값을 표시 할 수 있습니다 그래서 나는 50과 500과 적색을 넣고 싶다고 말할 것입니다 빨간색으로 따옴표를 넣습니다 그것은 문자열이기 때문에; 다른 두 숫자는 정수이므로 그대로 두었습니다 그런 다음 그 문장을 실행하면 아래쪽에 녹색 체크 표시가 나타납니다

나 한 행이 영향을 받았다 그래서 그냥 테이블에 일부 데이터를 삽입했다 나는 실제로 할 수 있었다 그런 다음 다시 돌아가서 수정할 수 있습니다 어쩌면 나는 100 x 100 파란 테이블을 만들 것이다 어, 파란색 상자에서 실행하십시오

그리고 하나 더 : 200 x 2000 노란 테이블을 보자 – 어, 노란색 상자 나는 상자 대신 표를 계속 말하고있다 나는 그것을 실행할 것이다 그래서 그 시점에서 그런 다음 실제로 테이블에 삽입 된 세 개의 다른 상자가 있습니다 만약 내가 실제로 한 번 살펴보고 그들이 실제로 거기에 있는지 확인하고 싶습니다

select라고 말할 수 있습니다 모든 상자에서 실행하면 워크 벤치 도구에서 다른 창을 볼 수 있습니다 그 테이블에있는 실제 데이터를 보여줍니다 그래서 저는 3 명이 있다는 것을 알 수 있습니다

본질적으로 세 줄을 기록한다 나는 모든 다른 데이터 조각들을 볼 수있다 삽입했는데 직접 할당 된 ID를 볼 수 있습니다 이제 우리는 물론 SQL로 작업하는 워크 벤치 도구에서 더 많은 시간을 보냅니다 물론 SQL은이 클래스에서 우리의 목적이 아닙니다

우리가하고 싶은 것은 시작이다 우리가 어떻게 PHP를 사용하여 이러한 기본적인 것들을 할 수 있는지 살펴 봅니다 그래서 저에게 넘어 가게 하죠 내 텍스트 편집기 여기 있습니다

그리고 내가 한 것은 이미 페이지를 시작한 것입니다 이 페이지에서 저는 이전 비디오에서 사용한 두 문장을 이미 넣었습니다 데이터베이스에 연결하기 위해 여기서 내가하고있는 일은 새로운 PDO 객체를 생성하는 것이다 이 새로운 PDO 객체는 내가 MySQL에 연결하고 있다고 들었습니다 데이터베이스가있는 호스트 localhost입니다

그래서 데이터베이스 서버가이 컴퓨터에 있습니다 나는 말하고있다 내가 PHP라는 데이터베이스에 연결하고 있는데 내 사용자 이름과 암호가 있습니다 이미 여기에 채워져있다 나는 또한 앞서 가서 setAttribute를 호출하고 데이터베이스에 말했다

연결로 인해 발생하는 오류가 예외로 표시되기를 원합니다 자, 정상적으로 나는 이것과 내가 try / catch 내부에서하고 있었던 것을 포장 할 것이지만, 여기에서는 조금 연습하고 다른 방법을 보여주고 싶습니다 이 데이터베이스 연결 작업에 사용할 수 있도록이 db 객체 내 예외를 제대로 잡으려고 너무 걱정하지 않을거야 예외가 발생하면 그렇다면 괜찮습니다 우리는 그 정보를 정보로 사용하여 웃기다

내가이 시점에서 내 브라우저로 건너 뛰고 새로 고침을 누르면, 순간에는 아무런 문제가 없습니다 아무 일도 일어나지 않습니다 내 브라우저에서 내 데이터베이스에 제대로 연결하고 있음을 알게되었습니다 이 데이터베이스 연결로 실제로 할 수있는 여러 가지 종류의 것들을 살펴보십시오 이제 우리는 실제로 그것을 가지고 있습니다

우리가 보길 원하는 첫 번째 것들 중 하나 연결된 데이터베이스를 사용하여 데이터를 검색 할 수 있습니다 대단히 방금 선택한 문을 실행했을 때 Workbench 도구와 매우 비슷합니다 내 데이터베이스에있는 데이터를 보여줄 것입니다 내 테이블에있는 데이터를 보여 주면 PHP에서 똑같은 일을 할 수 있기를 원한다 데이터베이스를 PHP 코드로 변환하여 실제로 사용할 수 있습니다

PDO 라이브러리는 우리는 여기에서 매우 유연하게 우리가 실제로 데이터를 PHP로 데이터베이스 당신이 그것에 대해 생각한다면, 그것이 끝났을 때 일종의 번역이 있습니다 그 자리를 차지해야합니다 데이터베이스는 데이터를 자체 방식으로 저장하지만 PHP에서는 변수와 배열, 데이터 유형 및 모든 종류의 것들을 가지고 있으므로 약간의 PDO 라이브러리가 실제로 어떻게 그 번역이 일어나는가에 관해 우리에게 알려주는 통제의 데이터베이스 객체에는 setFetchMode라는 메서드를 사용할 수 있습니다 이 setFetchMode 메소드는 기본적으로 메소드를 결정할 다양한 값을 전달할 수 있습니다

데이터베이스의 데이터는 PHP에서 다시 우리에게 제공 될 때 형식이 지정됩니다 코드 자체 실제로 PHP 웹 사이트를 살펴보고, PHP 웹 사이트를 방문하면 PHP 웹 사이트를 검색하여 PDO를 검색하고 Enter 키를 누르면 와서 많은 링크를 제공하여 문서의 다른 부분으로 안내 할 수 있습니다 이러한 PHP 데이터 객체 용 PDO 라이브러리 여기에서 우리는 대부분의 다른 호출 할 수있는 메서드 그래서 나는이 모든 것들을 확실히 커버하지 않을 것이다 동영상에 대한 추가 정보를 원한다면 갈 수 있습니다

에 대해 이야기하거나 내가 다루지 않는 것들에 대한 추가 정보를 얻을 수 있습니다 예를 들어, setFetchMode 메소드를 클릭하면 정확히 추가 정보를 볼 수 있습니다 그것이 어떻게 불리는 지, 당신이 할 수있는 다른 것들, 그 목적이 무엇인지 등등 PDO 라이브러리의 주요 링크 집합으로 돌아 오면 다음 작업을 수행 할 수 있습니다 미리 정의 된 값으로 이동하여 해당 메소드에 전달할 수있는 다른 값을 찾습니다

PDO 클래스의 상수와 그 상수 목록에는 여러 가지가 있습니다 fetch : PDO FETCH_LAZY, PDO FETCH_ASSOCIATIVE, PDO FETCH_NAMED로 시작하십시오 예 거기에는 꽤 다른 것들이 있습니다 그것들은 모두 다른 것들입니다

우리는 실제로 데이터베이스 연결을위한 setFetchMode 메소드로 전달할 수 있습니다 그런 다음 데이터가 반환 될 때 데이터의 형식이 실제로 결정됩니다 물론 하나 가장 자주 사용하는 경향이있는 가져 오기 모드는 fetchAssociative 및 기본적으로 데이터베이스 연결에서 새 데이터를 가져올 때마다 그 데이터는 결합 배열로서 우리에게 되돌려 보내 져야한다 그 연관 배열 데이터베이스 칼럼의 이름을 배열 키로 사용하고 실제 값을 그 특정 키의 값을위한 필드 그것에 대한 좋은 점 중 하나는 실제로는 디폴트이므로 setFetchMode 메소드를 실제로 호출 할 필요조차 없습니다

문서를 살펴보면 다른 가능성이 많이 있음을 알 수 있습니다 거기에 연관 배열로 가져 오는 것 외에 그럼 어떻게 실제로 우리가 가져 오기를 수행하여 데이터베이스 자체에서 데이터를 가져 옵니까? 음, 아주 좋아 데이터베이스 연결에서 데이터를 가져 오려면 워크 벤치 도구에서 수행했습니다 우리는 그것을하기 위해 질의를 작성해야 할 필요가 있습니다

쓰기 위해서 데이터를 가져 오기위한 질의, 데이터베이스 연결 객체 자체, PDO 객체는 특별한 메서드라는 쿼리 여기 쿼리 메서드를 사용하면 내가 할 수있는 일은 문자열로 전달할 수 있다는 것입니다 SQL select 문 그래서 내가 워크 벤치에서했던 것과 같이 select라고 말할 수 있습니다 예를 들어 모든 박스에서

실제로 해당 쿼리 메서드를 호출 할 때 그 쿼리 메서드 실행하면, 그 결과는 나에게 일련의 결과와 결과를 리턴 할 것입니다 반환 된 데이터는 여전히 유사 데이터베이스 형식이며 실제로 작동 할 수 있습니다 그 결과 값에서 추출해야하는 값들을 가지고 있습니다 나는 그걸로 할 수있어 결과 및 결과에서 fetch라는 메소드를 호출합니다

내가 전화 할 때마다 결과 집합에 메서드를 가져 오면 수행 할 작업이 하나의 행을 반환합니다 쿼리를 실행할 때 검색된 데이터 그래서 내가 가져올 호출하면 그것을 줄 것이다 나에게 하나의 행을 되 돌리면, 아니면 하나의 상자라고 생각할 수 있습니다 실제로 무엇이 결정될 것인가 – 어, 거기에 가져온 것의 형식은 무엇입니까? 실제로 setfetch 모드에 의해 결정됩니다 그 다음에 다시 올 것이다

연관 배열 (associative array)로서 데이터를 돌려 주라 그래서 상자에는 연관이 있어야합니다 배열을 사용할 수 있습니다 나가 나가고 시도하는 경우에 우리는 실제로 그것을 시도 할 수 있었다 이 시점에서 일부 출력 내가 에코를 말하면, ID :라고 말하자

그리고 나는 상자에서 말할 것이다 배열은 나에게 ID 필드의 값을주고, 그 후에는 너비를 추가 할 것이다 : 그리고 나서 내가 상자 배열에서 너비 키 값을 추가하고 그 이후로 나는 그곳에서 멈추지 않을 것이다 그냥 쉬라고 해두 죠 내가 다시 점프하면 브라우저를 열고이 페이지를 지금 다시 실행하면 이것이 실제로 끝나는 것입니다 돌아온다

ID 1 너비 50이라고 알려줍니다 실제로 그게 무슨 뜻인지는 그 두 가지 데이터입니다 내 데이터베이스 테이블에 넣은 첫 번째 상자 내가 높이를보고 싶으면 같은 방식으로 그렇게 할 수 있습니다 색상에 액세스하면 다시 똑같은 색상이됩니다

의회 단일 값에 대해 개별적으로 해당 값에 개별적으로 액세스하는 대신 상자, 예를 들어 모든 상자에 대한 데이터를 표시하려면 어떻게해야합니까? 글쎄, 우리는 잠재적으로 그렇게 할 수있는 것은 루프 내부에서 fetch 메소드를 여러 개 호출 할 수있는 것입니다 타임스 fetch 메소드를 여러 번 호출하려고한다면 알아야 할 것이다 본질적으로 얼마나 많은 다른 시간에 호출 할 것인가? 세트? 그것을 발견하기 위해서 우리는 호출 된 결과 집합에 대해 호출 할 수있는 메소드가 있습니다

실제로 얼마나 많은 행이 특정 결과의 일부인지 알려주는 rowCount 세트 예를 들어 echo가 있다고 할 수 있습니다 rowCount 메소드를 호출하면 그 후에 상자에 잠시 쉬라고 말하십시오 그리고 내가 브라우저에서 그것을 끌어 올리면 되돌아옵니다 정확한 3 개의 박스가 있다고 나에게 말한다

세 개의 상자는 얼마나 많은 상자입니까? 만들고 우리 테이블에 넣습니다 그래서 다른 것들을 함께 사용하면됩니다 그런 다음 우리가 원할 경우 데이터를 인쇄 할 수있는 루프를 작성할 수 있습니다 모든 다른 상자들 그 작은 코드를 주석으로 처리하겠습니다

난 그냥 해요 여기에 내 질문을 유지하려고합니다 같은 쿼리를 사용하면 다음과 같은 작업을 수행 할 수 있습니다 변수 i가 0에서 시작하는 변수를 말하며 변수 i는 행보다 작습니다 내 결과에서 셀 수, 실제로 얼마나 많은 결과를 얻었는지, 내가 갈수록 늘릴거야 이 루프를 통해이 루프 내부에서 실제로 인쇄 할 수 있습니다

내 상자에 대한 세부 정보 어쩌면 일련의 반향 설명을 통해이 작업을 수행 할 수 있습니까? 상자에 ID를 표시 할 수 있습니다 아, 물론, 여기 어딘가에 가져 오기를 호출해야합니다 안그래? 그래서 결과를 호출 할 때 돌아 오는 변수를 상자에 넣습니다 술책

그런 다음, 실제로 상자 변수에 해당 행에 대한 값이 있으면, 이전에했던 것과 똑같은 방법으로 간단하게 echo 문을 사용할 수 있습니다 그 그런 다음 echo 문을 복제하고 다른 측면에 대해 다시 수행하겠습니다 상자의 그래서 ID를 출력하고, 너비를 출력하고, 출력 할 것입니다

높이, 나는 그 색을 프린트 할 것이고, 그런 다음 그 키들을 my 배열을 사용하여 개별 데이터 조각 각각에 액세스합니다 우리가 있습니다 그리고 내가 간다면 그런 다음 브라우저에서 모든 상자에 대한 모든 데이터를 가져옵니다 상자 1 50 500 빨간색, 상자 2 100 x 100 파란색, 실제로 내 데이터베이스에 넣은 것과 정확히 같은 데이터 내가 작업대 도구에있을 때

따라서 실제로 쿼리 메서드를 사용하여 실행할 수 있습니다 select 쿼리는 나에게 결과 집합을 돌려 준다 거기에 얼마나 많은 가치가 있는지 알 수 있어요 그 결과는 rowCount 메서드를 사용하여 설정하고 나는 각 개별 행을 fetch 메소드를 사용하여 fetch 메소드가 데이터를 나에게 반환하는 형식 당신의 목적이 무엇인지에 따라 바뀌지 만 연관 배열은 기본값이며 일반적으로 잘 작동합니다

우리가 잠재적으로 할 수있는 또 하나의 가능성 여기에서 사용하는 것은 결과에서 얻은 모든 개별 결과를 처리하는 대신 우리가 여기있는 방식대로 한 번에 하나씩 설정하면 모든 결과를 한꺼번에 가져올 수 있습니다 단순히 fetchAll 인 fetch 대신에 사용할 수있는 또 다른 방법이 있습니다 예를 들어 boxes라는 새로운 배열을 만들 수 있습니다 결과 세트는 fetchAll 메소드를 호출하고 내 행 중 하나만 가져 오는 대신 내 상자는 이전에 fetch를 호출 할 때와 같은 방식으로, fetchAll은 이제 나를 돌려 줄 것이다 모든 상자

여기 상자는 배열을 통해 증가시킬 수 있어야합니다 모든 상자에 대한 데이터를 표시합니다 여기서 시도해 보겠습니다 악 foreach 루프를해라 그리고 나는 나의 박스 각각에 대해 말할 것이다, 박스로서 각각을 가져 가고, 그 다음 그 루프 안에서 내가 할 수있는 것은 본질적으로 이전에 해본 적이 있었지만 브라우저에서 어떻게 작동하는지 봅시다

브라우저로 돌아 가기 나는 새로 고침을했고 똑같은 결과를 얻었습니다 하지만, 여기에 한 번에 결과 세트에서 모든 결과를 추출하여 모두 저장하고 그 시점에서 전통적인 PHP 데이터처럼 작업 할 수 있습니다 이전에했던 것보다 훨씬 쉬워 졌기 때문에 이점이 있다고 생각합니다 대신에 우리가 여기에 있었던 것처럼 select 문을 사용하여 데이터베이스에서 데이터를 추출합니다 쿼리를 사용하여 데이터베이스의 데이터를 여러 가지 방법으로 작업 할 수있게하려면 어떻게해야합니까? 예를 들어, 새로운 데이터를 삽입하려면 어떻게해야합니까? 어떤면에서 우리가 데이터를 삽입하기 위해 PHP에서하는 것과 비슷할 것입니다

기본적인 근본적인 것 우리가해야할 일은 우리가 선택한 것처럼 SQL 문을 실행해야한다는 것입니다 질의와 비슷하지만, SQL 문 자체가 삽입되는 삽입 또는 업데이트와 같은 것 훨씬 더 복잡하다 예를 들어 워크 벤치 도구에있을 때마다 우리는 삽입 문을 처음으로 기억하기 위해 테이블에 데이터를 저장하려고했습니다 나는이 작은 선택 진술보다 훨씬 더 길었고, 훨씬 더 복잡했다 여기서 쓴거야

우리가 특별히 염려해야 할 것, 특히 여기에 PHP에서 매우 자주 삽입 값과 같은 값을 넣을 수 있습니다 문은 잠재적으로 사용자가 입력 한 값, 수집 된 값일 수 있습니다 예를 들어 사용자가 완성한 양식에서 우리는 매우 조심해야한다 그 이유는 우리가 특정 취약점의 영역에 있기 때문입니다 SQL 주입 공격이라고합니다

근본적인 문제는 사용자에게 양식을 제공하고 사용자는 올바른 방식으로 작성된 악의적 인 데이터를 해당 양식에 채운 다음 사용자가 우리에게 준 데이터를 가져 와서 SQL 쿼리로 파싱하면 잠재적으로 사용자가 데이터베이스를 손상 시키거나 다른 방법으로 우리를 위반할 수있게합니다 의도하지 않기 때문에 우리는 데이터를 취하는 방법과 그 데이터가 SQL로 작성한 삽입 문 및 업데이트 문과 같은 항목에 통합됩니다 PHP를 통해 이 PDO 라이브러리에 대한 좋은 점 중 하나는 일종의 내장 된 보호 기능으로 SQL 주입 공격으로부터 우리를 안전하게 지키려고 노력합니다 그만큼 일반적으로 작동하는 방식은 삽입 또는 업데이트와 같은 작업을 수행 할 때입니다

우리는 select 문과는 다른 방식으로 이러한 유형의 SQL 문을 수행합니다 무언가로 select 문과 같이이 쿼리 메서드를 사용하고 쿼리 메서드는 기본적으로 우리는 SQL 문을 여기에 가지고 있습니다 그것은 단단한 문자열입니다 그게 뭔가 있어야합니다 우리는 부수적 인 데이터가 아니라 여분의 데이터가 파싱 된 데이터가 아닙니다

다른쪽에 삽입 또는 업데이트 문장을 할 때 우리가 할 일은 데이터베이스에서 온 것입니다 우리는 준비된 선언문을 사용하려고합니다 실제 방법은 우리는 준비라는 방법이 될 것입니다 이 준비 방법으로 여기서 어떻게 될까요? 우리는 기본적으로 SQL 문에 대한 프레임 워크를 제공합니다 예를 들어 상자에 삽입하는 것과 같은 일을하십시오

삽입하고 싶은 필드를 말해 줄 것입니다 데이터를 삽입하여 데이터를 가로, 세로, 높이에 삽입하려고합니다 색상, 그리고 내가 삽입하고자하는 실제 값은이 괄호 안쪽에 있습니다 전통적인 PHP 문자열 조작을하는 대신 우리가 할 수있는 방법 내가 포함시키려는 다른 값들을 파싱 할 수있는 이전에 해왔 던 거기서,이 준비 문은 실제로 제가 할 수있는 것은 여기에 자리 표시자를 두는 것입니다 SQL 문으로 변환 한 다음 PDO 라이브러리 자체와 그렇게하면 채워지는 값을 확인하기 위해 조치를 취할 것입니다

SQL 인젝션 공격으로 이어질 수있는 값이 아닙니다 이제 저기에는 여기에있는 값을 실제로 대체 할 수있는 다양한 방법이 있습니다 하나의 우리가 할 수있는 방법은 명명되지 않은 자리 표시자를 사용하는 것입니다 이름이없는 자리 표시 자 우리가 할 일은 우리가 간단하게 넣을 것인가? 가치가있는 모든 곳 가다 그래서 내가 여기에 채워질 세 가지 가치가 있기를 원한다면 괄호 안에 3 개의 다른 물음표를 넣을 수 있습니다

각각의 그 물음표는 순서대로 내가 가치를 두는 곳이 될 것입니다 그곳에 그런 다음 실제 값을 그 자리 표시 자와 연결할 수있는 다른 방법이 있습니다 내가이 준비 문구를 여기 부르면 일어날 일은 나에게 줄 것이다 명령문 객체를 뒤로 – 나는 그것을 stmnt, statement 또는 명령문의 단축 버전이라고 부를 것이다 어쨌든 – 그 문장 객체에는 bindParam이라는 메서드를 호출 할 수 있습니다

이 bindParam 메서드를 사용하면 내가 원하는 값을 말할 수 있습니다 저 다른 장소의 각각으로 들어가십시오, 그래서 나는, 예를 들면, 장소 수 1 어떤 특정한 폭을 넣었습니다 나는 444 너비에 넣어 말할 수 있습니다 그런 다음 위치 2에 대해 바인드 매개 변수를 수행합니다 여기서 555의 높이를 가져온 다음 매개 변수를 바인딩합니다

색상은 3입니다 나는 그와 비슷한 방식으로 그것에 대해 갈 수 있었다 그것은 정말로 내가 선호하는 경향이있는 이유는 그것이 내가 가진 많은 다른 가치들 MySQL로 대체하려고합니다 많은 바인드 매개 변수 문이 필요할 것입니다 나는 조금 성가시다

이것이 잠재적으로 행해질 수있는 다른 방법 내가 훨씬 더 좋아한다는 것은 실제로이 SQL 문을 실행할 준비가되었을 때, 실제로 데이터베이스에서 실행할 준비가되면 내가 할 일은 나는 execute 메소드를 호출 할 것이다 만약 내가 바인드 경계선 퍼팅을했다면 그 자리 표시 자에 대한 값을 execute라고 부르며 그 시점에서 SQL 문 실행되면 실행됩니다 하지만 bind 매개 변수 문을 사용하고 싶지 않으면 대신 실제로 배열을 execute 문에 전달할 수 있습니다 그래서 여기에 예를 들어 444, 555 값과 녹색을 전달한다고 말할 수 있습니다 그러면 그것은 해당 배열의 값을 주어진 순서대로 가져 와서 자동으로 채 웁니다

물음표가있는 이름이없는 자리 표시 자에 넣습니다 그래서 444는 어디로 갈 것인가? 첫번째 ? 는 너비의 값에 해당하며, 555는 두 번째 ? 높이의 값에 해당합니다 내가 그 일을 할 수 있기 때문에 나는 그것을 좋아한다 여기에 멋진 삽입 문을 넣고 코드 대신 2 줄만 써도됩니다 이 모든 여분의 바인드 매개 변수 문을 거기에 넣어야합니다

이 배열 메서드는 난 그냥 많은 청소기를 쉽게 찾을 수 있습니다 우리가이 일을 할 수있는 또 다른 방법이 있습니다 그래도 나는 어떤면에서는 조금 더 멋지다고 생각합니다 우리가 할 수있는 또 다른 방법 잠재적으로 이러한 이름없는 매개 변수를 사용하는 대신이 작업을 수행 할 수 있습니다 명명 된 매개 변수라고합니다

그래서 3 개의 익명의 물음표 대신 여기 실제로 할 수있는 것은 내가 넣을 수있는 것입니다 : 내가 할 수있는 이름이 뒤따 랐습니다 : width, : height, 그리고 : color, 그리고 나서 실제로 값을 넣을 때 -와 함께 질의를 실행합니다 그 값들이 대체되고, 나는 배열을 다시 통과 할 수 있었고, 나는 그것을 할 수 있었다 연관 배열에서 키와 같은 이름을 다시 지정합니다 그래서 나는 구체적으로 말할 수 있었다 너비는 444의 값을 사용하고, 높이는 특별히 555의 값을 사용하고, 색상은 특히 녹색 값을 사용합니다

기술적으로 조금 더 타이핑, 좀 더 긴 코드를 작성해야하지만, 또한 생각합니다 더 읽기 쉽습니다 우리가 어떤 가치를 지니고 있는지 말해주는 배열에있는 사실 어떤 위치에 매우 구체적으로 이제 여기에서 자리 표시 자에 대해 알 수 있습니다

자체는 자리 표시자가 콜론으로 시작해야합니다 그것은 그 구문의 구문 일뿐입니다 공장 그러나 배열 자체에서 콜론을 앞에 놓지 않아도됩니다 실제 배열 키입니다

원한다면 할 수 있습니다 실제로 잘 작동합니다 콜론을 거기에 놓으십시오 그래서 지금 쓰여지는 것은 매번 일어날 일입니다 내 페이지에 액세스하여 명세서를 준비하고, 기본적으로 내부에 명세서를 작성합니다

데이터베이스 자체,이 삽입 문 그런 다음 그 진술을 실제로 실행한다고 말할 때 내가 전달한 값을 받아 들일 것이고, 그 값을 성명을 발표하고 그런 식으로 실행하십시오 그래서 지금 내 페이지를 실행할 때마다 내가 만든 쿼리와 가져 오기를 할 때 여기 아래에 새로운 색상이 생성됩니다 우리가 꾸준히 새로운 상자를 만들어야한다는 것을 알게 될 것입니다 뛰어 넘 으세요 브라우저에 연결하여 작동하는지 확인하십시오

브라우저로 돌아가서 나는 앞으로 나아갈 것이다 새로 고침을 누르고 새 값인 ID 4가있는 새 상자가 나타납니다 새로 고침을 클릭하면 다시 insert 문은 새로운 실행으로 다시 실행되고 거기에 우리가 간다 다른 상자가 ID 5로 생성됩니다 그래서이 페이지를 실행할 때마다 지금 삽입하십시오

실행하고 나는 그 값들로 생성 된 새로운 박스를 얻게된다 그 가치는 물론, 어디서든 올 수 있습니다 이 값들은 반드시 필요하지는 않습니다 be)이 같은 프로그램에 하드 코딩됩니다 대신 대개 이러한 대체 값 내가 양식에서 수집 한 값이거나 파일에서 읽은 값일 것입니다

다른 출처 이것이 우리가 일반적으로 진술을 준비하는 기본 방법입니다 그게 우리가 일반적으로 insert 문과 update 문 같은 것을 함께 쓰는 방식 모든 것이 꽤 잘 작동하는 것 같습니다 그와 함께가는 약간의 작은 비트는 우리가 여기에서하는 것처럼 insert 문을 실행할 때마다 statement 객체 그 자체는 언제나 되돌아 와서 우리에게 마지막 물체의 ID 번호를 알려줄 준비가되어 있습니다 방금 추가되었습니다

그래서, 예를 들어, 내가 말할 수있는 echo 문을 넣을 수 있습니다 추가 된 상자 ID는 – 그다지 좋은 언어는 아니죠? 그러나 나는 그것을 추측한다 작업 그리고 마지막 ID는 내 명세서 개체에 있습니다 데이터베이스 개체 자체에? 이것을 데이터베이스 객체 자체에 대해 호출 해 봅시다

lastInsertID라는 메서드가 있어야합니다 내가 가서 그걸로 휴식을 취할거야 모든 것을 읽을 수있는 방식으로 표시하려고 시도하고 실제로 얻는다 브라우저 위로 돌아가서 새로 고침하면 알려줍니다 마지막으로 추가 된 상자 ID 6이었고, ID가 6 인 새 상자가 만들어졌습니다

다시 새로 고침을 한 경우 7이라는 ID를 가진 새 상자가 추가되었다는 것을 알려줍니다 그래서 우리는 마지막으로 삽입 된 ID 메서드는 실제 데이터베이스 연결 자체가 아니라 해당 데이터베이스 연결에서 호출됩니다 내가 이전에 말하기 시작했듯이 성명서 객체는 ID가 무엇인지간에 항상 알려주고 서로 다른 시간에 편리하게 사용할 수 있도록 삽입되었습니다 다소간, 잘하면, 이 시점에서 당신은이 다른 것들이 어떻게 시작되는지에 대한 아이디어를 얻고 있습니다 함께

우리가하지 않은 유일한 일은 업데이트를하지 않은 것입니다 업데이트 중 본질적으로 삽입하는 것처럼 발생합니다 우리는 준비와 update 문을 실행할 때마다 메소드를 실행하고, 데이터를 업데이트하는 명령문을 실행한다 우리 테이블에 실제로 데이터를 삭제하려는 경우는 어떻습니까? 데이터를 삭제하거나 어떤 유형의 삭제 쿼리를 수행하면 execute라는 다른 메소드가 사용됩니다

방법 예를 들어 상자에서 삭제 실행을 할 수 있습니다 예를 들어 색상이 노란색입니다 우리는 데이터베이스 객체에서이를 호출 할 것입니다 실행 메소드가 사용 된 쿼리 메소드와 약간 다릅니다

선택을 위해 그리고 그것은 우리가 사용한 준비와 실행 방법과 매우 다릅니다 삽입 및 업데이트 기본적으로 쿼리는 데이터를 가져올 것으로 예상되는 상황에 대한 것입니다 결과와 마찬가지로 다시 돌아올 수는 있지만 실제로는 대체 할 수 없습니다 쿼리 자체 준비 및 실행은 일부 유형의 데이터가 잠재적으로 우리는 실제 상황에서 여러 유형의 업데이트를 수행해야 할 것입니다

실행중인 SQL 문 그런 다음 execute 메소드는 종종 삭제에 사용됩니다 데이터가 반환 될 것으로 기대하지 않는 상황입니다 우리는 실제 SQL 쿼리 자체에서 어떤 종류의 치환도하지 않을 것입니다 그래서, 어떤면에서는, 일종의 가장 엄격한 묶음

그러나 그 중 몇 가지 방법으로 실제로 데이터베이스에서 데이터 액세스 및 작업 PHP에서 전반적으로 패턴에 익숙해지면 작업하기가 대단히 어렵지 않습니다 우리가 쓰고 읽어야 할 모든 일보다 확실히 더 이상 플랫 파일에서 그리고 당연히 데이터베이스 자체로 작업하는 것은 또한 잠재적으로 많은 것을 가지고있다 우리가 얻을 수있는 추가 혜택 : 빠르고, 더 나은 동시 액세스, 향상된 보호 우리의 데이터 우리는 또한 새로운 보안 문제가 발생할 수 있음을주의해야합니다

예를 들어 SQL 인젝션 공격처럼 하지만 약간의 연습으로 전반적으로 PDO 라이브러리를 사용하여 PHP를 통해 데이터베이스 작업하기는 어렵지 않습니다 할 것

2.2 LEARN THE BASICS OF PHP PROGRAMMING

이 비디오에서 우리가 할 일은 우리의 웹 디렉토리에 첫 번째 PHP 파일을 만드는 것입니다 그리고 우리는 이것을 브라우저에서 미리 볼 것입니다

또한 PHP에서 함수라는 PHP 함수를 사용하려고합니다 어느 것이 PHP 설치에 대한 정보를 제공 할 것인가? 테스트 목적으로 유용 할뿐만 아니라 미래에도 유용합니다 PHP 설치의 일부 설정에서 몇 가지 사항을 확인해야합니다 그래서 우리는이 파일을 시작해야합니다 그리고 우리의 브라우저는 모든 것이 작동한다고 확신합니다 그리고 나서 실제로 유용한 작업을 시작할 수 있습니다 따라서 브라우저에서 열어 둔 디렉토리를 수행 할 것임을 알 수 있습니다

아파치를 통해 볼 수있다 그래서 기본적으로 우리가 지금하려고하는 것은 우리의 텍스트 편집기를 열 수 있습니다, 우리는 전진하고 새로운 파일을 생성해야 그럼 그냥 가서 이걸 저장하고 아무것도 넣지 말고 걱정하지 마세요 처음에는이 집이라고 부르겠습니다 PHP 그들은 또한 이것을 아무것도라고 부른다 그러나 우리가 브라우저로 돌아가서 신선한 것을 치면 당신은 소방서라고 불리우거나 심지어 색인을 생성하기로되어 있습니다

보통 아파치는 그것을 당신의 뿌리로 보게 될 것입니다 당신이 파일을 경우 실제로 무슨 일이 있었는지 파일은 기본적으로 열려 지금에가는 것과 같다 더 이상 업체 정보가 표시되지 않지만 자체 목록입니다 집은 도트 PHP라고하며 프로세스가 너무 멀리 떨어져 있습니다 이것은 우리에게 타이핑하고있는 집과 같았다 이 URL 막대에있는 PHP는 다음과 같습니다 이제 다른 파일을 만들면이 홈 파일을 삭제하십시오

그래서 그냥 그 연락처는 PHP 도트 가라고 말하자 이 루트 파일, 그래서 우리가 가서 탐색 할 때 당신이 여기에 표시됩니다으로 볼 수없는 것을 볼 수 있습니다 따라서 우리는 많은 파일을 생성 할 수 있지만 일반적으로 우리가 원하는 것은 파일 처음에는이 indexphp를 호출합니다 그럼 실제로 무언가를 만들어 봅시다 우리 파일의 내용은 이제 모든 것이 진행되고 있는지 확인하고 PHP로 개발을 시작할 수 있습니다

우리는 전화로이 파일 인덱스 도트 PHP를 이미 호출했습니다 우리는 이것에게 PHP 확장을주었습니다 그래서 이것은 현재 PHP 파일이며 아파치와 PHP에 의해 해석됩니다 이제 우리에게 돌아 오기 전에이 파일을 처리 중입니다 그러면 실제로 어떻게 할 것인가, 아니면 실제로이 파일에 무엇을 넣을 것입니까? 그럼 시작해야할까요? 취임식에서 PHP를 허용하는 태그 우리가 PHP를 작성한다고 명시되어 있으며,이 해석을 위해 우리는 한 번에 물음표와 PHP 열기 또는 서명하기 그래서이 경우에 우리가 PHP 정보를 말할거야, 그리고 이벤트는 우리가 두 개의 진주 브래킷을 제공하려고하고, 우리는 우리를 위해 끝낼 수 있습니다

우리의 웹 또는 우리의 브라우저를 방문하여 이것을 미리보기 그리고 내가 PHP 버전을 실행하고 있다는 것을 여기서 볼 수 있다면, 5 점 4 점이 6 점입니다 또한 실행중인 버전을 최신 상태로 유지할 수 있기 때문에 유용합니다 일부 기능은 버전의 새 버전에서 강등 될 수 있으며, 새 버전의 기능 따라서 앞으로 나아가서 PHP 설치를 업데이트하고 앞에서 언급 한 것처럼 몇 가지 정보를 나열했습니다 회사 소개 PHP의 설립 당신은 다른 설정 파일을 볼 수 있습니다, 그래서 당신이 이제까지 단지 빨리 할 경우 손 좋은 일이 뭔가를 볼 필요가 이제 우리가 한 일은 첫 번째 PHP 파일을 만들었습니다 우리는 성공적으로 실행했고 우리는 PHP 설치에 관한 정보를 얻었다

Scriptcase 9: Advanced Grid and Form Applications

안녕하세요, Scriptcase의 전문가 과정의 세 번째 클래스에 오신 것을 환영합니다 나의 이름은 카를로스, 나는이 강좌의 강사이고 오늘은 시스템 관리자를 지원할 몇 가지 응용 프로그램 먼저, 모든 약속 세부 사항 및 다른 보고서가 포함 된 전체 보고서 하나를 작성합니다

관리자가 약속을 만들 수 있습니다 그가 서비스의 기간 및 총 가격을 계산합니다 자동으로 약속 좋아요, 그럼 여기에 접근 해 봅시다 약속 프로젝트에 액세스하십시오

그래서, 우리가 가고있는 첫 번째 응용 프로그램입니다 오늘 만드는 것은 그리드 어플리케이션입니다 이제 새 응용 프로그램 만들기> 그리드로 이동하십시오 이 응용 프로그램은 약속 테이블을 사용할 것입니다 과 그것은 "grid_appointments_adm"이라고 불릴 것입니다

그것을 창조합시다 하지만, 이미 리포지토리에 대한 액세스 권한이있는 경우 여기에 저장소가 있습니다 grids> grid_appointments_adm을 참조하십시오

여기에 SQL이 있습니다 그 선택 사항, 알았지? 사실, 당신은 그것을 배치 할 필요가 없습니다 필터는 약속이 상태가 우리의 "대기 확인", 알았지? 그러나 이 경우는 현재 날짜가됩니다 이것은 mySQL 함수입니다 내가 가지고있는 데이터베이스가 조금 오래 되었기 때문에, 여기 날짜 중 어느 것도 현재 날짜보다 큽니다

그래서, 실제로 이것은 약속을 나열하지 않으므로이 where 절을 사용하지 않을 것입니다 그럼, 여기서 다시 가자 당신이 볼 수 있도록 응용 프로그램을 실행하겠습니다 이 응용 프로그램에 표시되는 내용 우리는 약속의 ID, 직원 ID, 고객 ID, 가격, 추가 요금 및 할인

그곳에 표시되는 다른 필드이기도합니다 여기에는 다른 분야가 있습니다 : 총 가격, 약속 시작 날짜, 시작 시간, 종료 날짜, 종료 시간, 현재 상태 반복, 기간 및 등급 좋아요, 그래서, 나는 표시되는 필드를 수정하려고합니다 이 신청서 사실 몇 개의 필드를 제거하려고합니다

여기로 가자 필드 위치 지정 처음에 모든 것을 제거하도록하겠습니다 하나씩 선택하면이 필드에이 응용 프로그램에 표시되기를 원합니다 시작 날짜와 시작 시간, 직원 ID, 고객 ID, 총 가격 및 현재 상태 ID

이것을 저장합시다 내가 가자 전지 직원 ID, 고객 ID 및 현재에 대한 조회 설정을 조정하겠습니다 상태 ID

직원 ID는 자동으로 조회하도록하겠습니다 방법 여기에 선택을 만들어 보겠습니다 그것은 스태프 테이블을 사용 중이면 키 필드는 스태프 ID가되고 필드 직원 이름이 표시됩니다 알겠습니까? 그걸 확인합시다

여기에 가자 고객 ID, 이것을 저장하십시오 주의 사항 : 다음을 포함하는 필드에 차이가 있습니다 조회 방법이 활성화되었습니다 이 삼각형 부분은 오른쪽에서 볼 수 있습니다

측면, 필드 아이콘의 하위 부분 그래서, 그것은 차별화 된 것입니다 lookup 메소드를 가지고있는 필드 다시 말하지만, 여기 고객 ID는 자동 검색을 할 것입니다 고객을 기반으로 "Select select" 테이블, 실제로 이러한 필드를 사용합니다

주요 필드 : 고객 ID; 표시 할 필드 : 고객 이름 저장하십시오 여기서 "current_status_ID"로 가자 검색하려면 여기로 이동하십시오 방법 : 자동

"appointment_status"테이블을 사용하여 select를 만들고 "appointment_status_ID"를 키 필드로 사용하고 그 필드는 "appointment_status_description"이 표시됩니다 저장하십시오 애플리케이션을 실행하고 결과를 봅시다 좋아요, 그래서 지금 작업하면서 관련 데이터를 표시하기 시작했습니다 관리자,이 데이터를 실제로 볼 필요가 있습니다

하지만 몇 가지 사항이 있습니다 이 그리드 애플리케이션을 훨씬 더 효율적으로 만들고 필터링하거나 주문할 수 있습니다 사실, 기록 내가 그리드 어플리케이션 그룹별로 지원합니까? "group by"에서 이름이 말했듯이, 그룹 기반의 레코드를 그룹화합니다 네가 바라는 분야 야

여기 Scriptcase로 돌아 가자 여기로 이동 fields 폴더와 여기에 "group by"로 가자 다음과 같이 정적 그룹을 만듭니다 괜찮아? 이것은 Scriptcase 9 버전의 새로운 기능입니다 기본적으로 그룹으로 필드를 끌어서 놓기 만하면됩니다

이 경우, 주의를 기울이십시오 : 더 이상 합계가 없다는 것을 유의하십시오 응용 프로그램의 다른 부분 모든 것이 여기에서 직접 제어됩니다 그룹 그래서, 기본적으로 내가 할 일은 "customer_status_ID"를 필드별로 내 그룹으로 드래그합니다

그럴거야 y 축, 알 겠어? 나는 둘 이상 가질 수있다 그룹별로 여기에 필드가 있습니다 그리드 합계의 경우, 나는 총 가격을 끌거야, 알았지? 요약, 나는 아직 끌지 않을거야, 나중에 직접 요약에서 직접 설정할 수도 있지만 방해 나는 여기에 "상태"라는 이름을 설정했다 좋아, 그럼 그걸 저장하고 실행하자

응용 프로그램, 그래서 너희들은 정확히 내가 뭘했는지 알 수 있었다 그래서, 그것은 그룹화 처음에는 많은 레코드를 보여 드리겠습니다 그리고 결국 우리는 실제로 각 레코드에 대해 합계를 봅니다 나는 모른다

왜 여기에 "2"를 표시하고 다른 하나는 보여 주는지 여기 보자 나는 또한 설정할 수 있습니다 그룹 별 필드의 조회 설정 이것은 사실 내게도 새로운 것입니다

실제로 Scriptcase 9를 많이 사용하지 않았습니다 그래요 당신 여기에서도 조회 상태 조회를 설정할 수 있습니다 그것이 조금 시작된 이유입니다 처음에는 직접 보이지 않는 이상한데, 왜냐하면 스크립트 81에서 조회 설정을 직접 입력란의 필드 설정에서 직접 입력하십시오

전체 그리드, 그것은 모든 모듈에 대한 해당 조회 설정을 입력거야,하지만, Scriptcase의 개발자들이 각 모듈을 만들었습니다 그리드의 독립적 인, 그래서 모든 것은 실제로 상속하지 않습니다 그리드에서 직접 설정하여 필드를 만들 수 있습니다 귀하의 필요에 따라 더욱 맞춤화되었습니다 그럼, 지금 실행하면 아마 갈거야 기다리고있는 확인을 보여주기 위해 여기에 하나를 설정하고 두 사람을 위해 일정을 잡으라

기대 다시 해 볼까요? 이상한 잘, 사실, 개발 팀과 함께 여기에 문제가있을 수 있습니다 조회 설정을 포함하도록 설정된 경우 필드 및 설정에 따라 그룹에서 여전히 ID를 표시합니다 기록하고 정확하게 프로그래밍 된대로 설명을 작성하지 않은 경우 이걸 버그라고 생각해, 알았지? 나는 정말로 사과하기 때문에 사과하고 싶습니다

이것이 일어날 것을 몰랐다 하지만 문제는 내가 버그에 연락 할거야 팀을 찾아서 그들이 정리 해줄 수 있는지 확인하십시오 알았어, 음, 계속해서, 이것은 내가 여러분에게 보여주고 싶은 그룹 별 중 하나였습니다 다른 하나는 동적 그룹입니다

동적 그룹은 다른 그룹과 다릅니다 정적 그룹은 애플리케이션을 실행할 때 알 수 있듯이 그렇게 유지됩니다 영원히 에 의해 동적 그룹을 적용 할 때, 시작을 배치하고 싶다고 가정 해 봅시다 데이트, 여기 보시죠

전체 날짜까지 말하자 시작 시간, 시간 및 분, 직원 ID, 고객 ID 및 현재 상태 ID가 표시됩니다 그리고 또한 총액 : 총액

예, 합계입니다, 알았죠? 이렇게하면, 내가 그것을 실행하자 여기에 가면 "그룹화"라는 새 버튼이 있습니다 때를 그것을 클릭하면 두 개의 탭이 있습니다 : 그것은 현재 정적 인 것이고, "동적"을 클릭하면 될 필드를 변경할 수 있습니다 그룹화 그래서, 날짜를 봅시다

그래서, 그것은 정보를 모두 그룹화합니다 실제로 시간은 여기에 있습니다 시간대별로 그룹화한다고 가정 해 보겠습니다 대신 그래, 거기에 오류가있다

초기 버전 고객 ID를 사용해 보도록하겠습니다 따라서 고객 ID별로 그룹화됩니다 그래, 그게 그룹이야 그것이 그 목적입니다

기본적으로 사용자의 필요에 따라 화면에 정보를 그룹화하지만 그룹 기준으로 요약을 사용할 수도 있습니다 나중에 내가 너에게 보여줄거야 이 애플리케이션에서 그러나 나는 아직도 너희들에게 또 다른 특징을 보여주고 싶다 세련된 검색 세련된 검색 – 당신이 온라인 상점에 익숙한 지 모르겠다

또는 전자 상거래 시스템의 왼쪽에는 필터 메뉴가 있습니다 필터를 적용하려는 정보를 선택하십시오 글쎄, 그건 좀 비슷해 이것은 하나 – 실제로, 나는 현재 상태를 선택할 것입니다 이걸 보자

"직원 ID"및 "약속 시작 날짜" 저건 구해줘 좋아, 그럼 어서 가자

실제로, 왼쪽 부분에서 여러분에게이 부분을 보여주기 위해 실행하도록하겠습니다 나는 기다리고있는 확인에서 걸러 낼 수 있으므로 기다리는 모든 사람 확인은 시작 날짜와 함께 여기에 있습니다 많이있다 여기에 날짜가 표시되며 내 화면이 오염되는 것과 같습니다 일종의 그리드 자체 아래에 간다

저것을 대우하는 방법이있다 내가 돌아 가면 검색 수정> 입력란에 '더보기'라는 옵션이 있습니다 이 옵션을 사용하면 최대 레코드 수를 알릴 수 있습니다 표시하고 싶으면, 더 많은 레코드를 보여줄 링크를 허용하십시오 그래서 다시 해보자

좋아, 이제 열 개를 보여주고있어 "모두보기"를 클릭하면 지금 모든 기록을 볼 수 있습니다 가장 이상한 것은이 "직원 ID"가없는 것입니다 이름 데이터베이스 빌더에서 여기서 어떤 것을 확인해 보겠습니다

그냥 잠깐 사실 그것은 "직원"입니다 데이터를 선택하십시오 이름이 없습니다 이걸 앤더슨에게 바꿔 드리겠습니다 구하다

좋아, 이제 그 이름이 여기에 주어 졌는지 보자 아직도 아니야 그럼 내가 약속에 문제가 있다고 생각합니다 여기에 쿼리를 실행 해 보겠습니다 어느 쪽이 카를로스 야

5 번 앤더슨에 대한 모든 것을 놓으십시오 내가 뭔가 시험하게 해줘

이리 예, 0이됩니다 이유는 모르겠습니다 "UPDATE 약속 SET staff_id = 5 WHERE staff_id = 0" 괜찮아, 지금 실행되는지 보자

알았지? 앤더슨입니다 그래서, 그것은 또 다른 것입니다 SQL 빌더도 마찬가지입니다 일반 DML 명령을 실행합니다 좋아, 다음 일은 내가 고급 검색에서 할 수있는 설정을 보여주고 싶었습니다

가자 다시 Scriptcase에 여기있는 사람들 검색 – 고급 검색으로 이동해 봅시다 내가 할 일은, 내가 사용할 분야를 선택하도록하겠습니다 고급 검색

첫 번째는 현재 상태 ID이고, 다음은 스태프 ID이며, 고객 ID 및 약속 시작일 저장하십시오 그렇게하면 나는 여기 필드로 가서 각 필드를 설정하겠습니다 이 입력란은 선택형이 될거야, 알았지? "자동", 여기에 약속 상태에 따라 작성하십시오 좋아요, 직원 ID는 직원에 따라 그래서 고르다

"오토매틱" 직원을 기준으로 선택 만들기 좋아, 고객을 만들어 보겠습니다

이 번호는 자동 완성 번호가 될 것입니다 많은 사람들이 저에게 텍스트와 번호 자동 완성 기본적으로 내부 가치입니다 너는 조작하고있어 텍스트는 일반적으로 사용되며 사용자가 사용할 때 사용해야합니다

영숫자 값인 내부 값을 처리합니다 오직 사실 번호가있는 신분증을 치료할 때 번호 자동 완성이 가능합니다 약속 날짜와 약속 시작 날짜를 저장하십시오 나는 특별한 것을 바꿀거야 우리가 여기있는 조건

그것이 될 특별 조건 사용하는 것은 기본적으로 모두 다, 알았지? 과 동적 검색, 또한 같은 필드를 선택하겠습니다 현재 상태 ID, 직원 ID, 고객 ID 및 약속 시작일 나는 그들을 세울 필요가 없다 다시 들판에 이미 있기 때문에 다시, 알았지? 그러나 나는 아직도 필요하다

여기서 설정으로 이동하고 다른 필드에 대한 검색 기준을 설정하십시오 직원 ID에서는 값이 같을 때만 값을 사용할 수 있습니다 선택 상자에 내가 설정 한 값 고객 ID입니다 "동일"

약속 시작 날짜 나는 그것을 "두 가치 사이"로 설정하려고합니다 그리고 현재 상태 ID도 "같음"입니다

그럼, 저것을 실행합시다 무슨 일이 일어나는가? 여기서 고급 검색에 액세스하면 현재 상태를 선택할 수 있습니다 그것은 결론 지어지고, 주인은 Isaac입니다 좋아요, 그래서, 그것은 일종의 집단입니다 그것은 내가 사용하고있는 필터를 보여 주며, 현재의 특정 상태를 찾는다

여기 총계도있어, 알았지? 동적 검색을 설정할 수도 있습니다 종결 된 모든 분야를 원한다고 가정 해 봅시다 "대다" 그리고 그것은 보여줍니다 아브라함, 야곱, 이삭에 대한 나, 괜찮 니? 동적 인 고급 기능입니다

수색 내가 보여주고 싶은 또 다른 점은 내가 여기에 합계를 설정하여 총계에 직접 설정할 수 있습니다> 설정, 그렇지 않은 경우 착각이되어서 직접 여기에 놓으라고 부탁합니다 난 그냥 해요 "총 가격"이라고 말할 것입니다 여기, 여기, 여기, 여기, 여기 그걸로 가자

좋아요, 모든 기록에 대해 그 레이블을 봅시다 여기 총 가격이 있습니다 권리? 그래서 각 그룹별로 직접 여기에 추가되었습니다 너에게 보여 줄께 우리가 가지고있는 요약

요약을 보시려면 여기를 클릭하십시오 그 종류의 요약은 현재 상태 ID 만 보여줍니다 클릭하면 여기에 특정 현재 상태에 대한 모든 레코드가 표시됩니다 하자 예를 들어 여기에> 동적으로 그룹화하려면 여기에 축을 설정할 수 있습니다 예를 들어 y 축인 직원 ID와 고객 ID를보고 싶습니다

X가되고 좀 혼란 스럽네요, 그렇죠? 실제로, 그것은 심지어 전체로 배치되지 않습니다 이상한 이 부분이 나타납니다 에 직접 문제가있을 수 있습니다

그래도 그룹 나는 심각하게 버그 팀에 연락하고 무엇이 필요한지를 볼 필요가있다 왜냐하면 내가 기억하기에, 만약 당신이 이것을한다면, 그것은 여기서 직원의 이름과 상태 설명을 표시하고 여기서 기록의 양 틀린 것이 있어야합니다 실제로 조회 설정을 직접 사용하여 그룹과 내가 그들에게 연락해서 볼거야

정확히 무슨 일이 일어나고 있는지 아마 많은 사람들이 똑같은 고통을 겪고있을거야, 알았지? 이 응용 프로그램은 여기 완료되었습니다 여기에서 그것을 닫으십시오 다음 것 우리가 만드는 응용 프로그램은 양식 응용 프로그램이 될 것입니다 응용 프로그램을 사용하여 약속을 예약하는 데 사용됩니다

특정 날짜와 시간을 선택하십시오 서비스 가치를 계산합니다 자동으로 모든 관련 고객 및 직원에게 전자 메일을 보냅니다 실제로 이메일을 보내려면 보증 할 수 없지만 나는 아직 코드를 테스트하지 않았다 "형태"

"설비" 여기에서 이름을 확인하겠습니다 그게 form_appointments 야 알았지? 그것을 창조합시다 내가 실제로 이메일을 보낼 것이라고 보장 할 수는 없습니다

나를 테스트하기 위해 순간에 SMTP 계정을 실행하십시오 좋아, 그럼, 여기로 가자 필드 위치 지정 나는 몇 개의 들판을 제거 할 것이다 첫 번째는 약속 ID, 반복, 기간 및 평가, 종료 날짜 및 종료 시각

그것을 저장하고 몇 블록을 만들어 봅시다 여기에 가자 레이아웃> 블록 세 블록을 만들어 보겠습니다 이건 "데이트"라고 부를거야

하지만 자동으로 이름을 얻으려는 라벨을 알려주지 마십시오 당신 여기를 볼 수 있습니다 다음에 나는 "가치"라고 부를 것이고, 세 번째 것은가는 것입니다 "서비스"가 될거야, 알았지? 그래서, 첫 번째는 들었습니까? 이 부분 만 여기서 제거하겠습니다 이 사람은 사실, 제목이 닫히기 시작할거야, 알았지? 그리고 내가 여기에 열이 있습니다

초기 블록에는 세 개의 열이 포함됩니다 무엇인가 이 칼럼? 이것이 표시 할 필드를 구성하는 방법입니다 화면 여기에 하나만 입력하면 어떻게 보이는지 볼 수 있습니다 표시, 알았지? 그래서 이것은 현재 우리가 바라 보는 분야입니다

내가 여기 셋을 설정하면 그냥 실행하면 모든 필드가 첫 번째 블록에 계속 남아 있습니다 그렇게 될 것입니다 여기에서 볼 수 있듯이 세 열로 나뉩니다 그러나 나는 그들을 다른 블록들, 그래서 두번째 컬럼은 두 개의 컬럼을 포함 할 것이고 가치는 4를 포함 할 것입니다 저건 구해줘

그것들을 그들의 정확한 블록 날짜는 기본적으로 시작 날짜와 시작 시간입니다 시각, 여기 값은이 4 개입니다 나머지는 여기에 머물러 있습니다 필요한 직원 ID 고객 ID 및 회전 상태 ID 조회 설정을 구성 할 수 있습니다

그들은 이미 선택 필드로 설정되어 있지만 하지만 조회 설정을 올바르게 작성하지는 못했습니다 "직원"

여기있어 바르게 "고객 ID" 좋아요, "현재 상태 ID", "약속 상태" 좋아 네가 지금 어떻게 조직되어 있는지 볼 수 있도록해라 알았지? 이제해야 할 일은 사실 두 가지입니다 설정을 변경하려고합니다

약속 시작 날짜와 시작 시간 둘 다 여기있어, 알았지? 시작 시간에는 형식을 변경하여 시간과 날짜를 표시합니다 의사록 시작 시간에 여기로 가보겠습니다 표시하고 "hh / mm"으로 변경하면 형식이 변경됩니다 그 시작 날짜,이 스위치는 날짜 형식의 버전을 제거 할 것입니다

바로 여기에 그걸 해보자 표시되지 않는지 확인하고 이 시간과 분으로 바뀌 었어, 알았지? 좋아 좋아 가격과 총 가격을 라벨로 설정하겠습니다

알겠습니까? 자, 가자 여기에 가격 기본적으로, 나는이 옵션을 여기에서 가능하게 할 것이다 "label field" 필드는 레이블 필드로 작동하며 변경할 수 없습니다

세부 사항 : 그것은있을 수 없다 인터페이스에 의해 직접 변경되었지만 변경 될 수있는 이벤트가있는 경우 내부적으로 그 값은 정상적으로 변경 될 것입니다 좋아요, 여기 여기에 라벨이 붙어 있습니다 내가이 위치를 바꿀 수있게 해줘 실제로 레이블

그들이 모두 왼쪽에 있기 때문에 일종의 이상합니다 오른쪽 필드 블록으로 다시 돌아가 위에서 레이블을 설정해 보겠습니다 우리가 더 잘 조직 할 수 있도록 실행 해 봅시다

이렇게 이상하게 여깁니다 좋아요, 그럼 더 좋을 것 같네요 저는 여러분에게 PHP라는 것을 소개 할 것입니다 행동 양식 그것이 스크립트 케이스가 만드는 곳입니다

PHP 함수는 응용 프로그램에서 재사용됩니다 어떻게 우리가 그렇게 할 수 있겠습니까? 이것들을 닫자 프로그래밍에 들어가면 여기 있습니다 "프로그래밍> 새로운 방법" 이 새로운 메소드를 클릭하고 새로운 메소드를 만들어 봅시다

메서드는 "upd_price"라고합니다 그렇게하면 만들자 좋아, 이것은 PHP 편집기이다 우리가 행사에서 가지고있는 것과 똑같은 것 코드에서 코드를 가져 오도록하겠습니다

저장소 양식에 가자 여기 그럼 내가 정확히 여기서 뭘하고있는거야? 나는 추가 요금을 받고있다 할인을 뺀 다음 그 결과를 가격에 더하고 그 값을 얻습니다

결과 및 총 가격 적용 그래서, 내가 추가 비용, 총 가격 자체에 그 가치를 추가해야합니다 만약 내가 가지고 있다면 할인, 나는 합계 가격에서 그 가치를 직접 뺄 필요가있다 좋아요 그걸 구해주게

나는 또 다른 방법을 만들 예정입니다 "fill_values"라고 불릴거야, 알았지? 여기로 돌아가서 그 코드 이건 좀 더 복잡해 설명해 줄게 그것은 너희들에게 그렇다 따라서이 코드는 모든 기간 및 가치를 계산합니다

이 약속에 첨부 된 서비스 내가 몇 가지를 가지고 있다는 것을 기억해라 필드를 삭제하고 디스플레이에서 제거 했습니까? 그 분야는 실제로 존재하지 않지만 표시되지만, 그것이 당신이 생각할 때 고려되지 않는다는 것을 의미하지는 않습니다 데이터 조작 우리는 여기서 그것을 바꿀 것입니다

그래서 내가하고있는 일은 값을 입력하고 숨겨진 필드에 값을 적용하려면 여기에서 몇 가지 수학을 수행하십시오 사실, 약속, 종료 날짜 및 약속 시작 날짜 – 실제로, 약속 끝 날짜와 종료 시간 직접 정보 얻기 데이터베이스와 화면에서; 그래서 여기 단계별로 "@val_duration"변수가 있습니다 그 값은 0이고, "@val_price"도 0입니다 여기 내려와

나는 select 명령을 포함하는 변수를 선언한다 기간 및 상금 약속 테이블에서 그리고 또한 약속 유형과 내부 조인, 필터링에서의 약속 ID 위치 필터링 약속 상세 표는 약속 ID에 제시된 것과 동일합니다 이 필드가 현재 숨겨져 있다는 것을 의미합니다 그렇지 않다고 표시됩니다 논리는 여기에 지역 변수에 적용되는 쿼리가 있습니다 그런 다음 여기에서 Scriptcase의 "sc_lookup"이라는 매크로를 사용하고 있습니다

이 매크로를 사용하면 데이터베이스에서 결과를 직접 쿼리하여 반환 할 수 있습니다 그것은 양방향 벡터 또는 2 차원 광선 또는 행렬에 따라 달라집니다 어떻게 그걸 부르고 싶은지 좋아요, 그런 종류의 수직 위치를 반환합니다 수평 위치, 알았지? 그래서 여기에 "0, 0"이 있습니다

이것은 무엇을 의미 하는가, 사실은? 이 쿼리가 여기에 하나의 행으로 전송되었는지 고려해 봅시다 에 벡터에서 한 줄 이상을 반환하면 모든 것이 0부터 시작합니다 1, 2, 3, 4입니다 예를 들어이 쿼리가 두 줄을 반환하면 0으로 시작하고 따라서 여기서는 0부터 시작하고 0 인 첫 번째 줄은 2로 시작합니다 열

이 경우 약속 기간 및 가격 위치 0은 기간이되어야합니다 예를 들어 여기에 가격이 있으면 가격이 책정됩니다 그래서, 이 경우 나는 지속 기간을 얻는 행이 있는지 확인하고 그것을 적용합니다 직접 지역 변수에

가격과 같은 것, 가격 그것을 얻고, 나는 가치를 전달하고있다 가격 필드에 직접 연결하고 시작 날짜를 적용하여 끝과 같음 날짜 그런 다음 정보를 탐색하면서 시작 시간을 얻습니다 시간과 분을 얻고, 부분으로 분리하고 60 분을 곱하면됩니다

– 여기에 부품을 가져 오는 것과 시간에 그것을 돌려, 알았지? 음,이 두 가지 방법이 만들어집니다 그러나 우리는 그들을 어디에서 사용할 것인가? Scriptcase는 일종의 이벤트를 제공합니다 Ajax라고 불린다 선택 필드를 변경할 때 사용하는 것의 종류 다른 필드의 값 Scriptcase는 일반적인 필드에 이벤트를 제공하고, 이쪽이 바로 여기입니다 Ajax 이벤트

이제 새로운 Ajax를 만들어 보자 행사 내가 만들 예정인이 행사의 목적은 무엇입니까? 에 대한 예를 들어 내가 추가 할 때 내가 원하는 것은, 여기에 50, 56,이 추가 비용은 계산되어 총 가격에 더해진다 괜찮아? JavaScript와 Ajax를 통해서만 가능합니다 이 경우 Ajax를 사용할 것이다

다음은 첫 번째 단계입니다 여기에서 요청한 매개 변수는 이벤트를 트리거 할 필드입니다 이 경우 추가 비용을 선택하겠습니다 사용하려는 이벤트 유형을 선택합니다 나는 onChange

필드에서 값이 수정되면이 이벤트는 트리거 됨 그럼,이 일을 만들고, 이벤트를 만들고, 나는 무엇을 할거야 여기에있는 장소? 글쎄, 내가 만든 메서드 "upd_price"를 호출 할 것이다 즉, 지금 애플리케이션을 실행하면 여기에서 "56"을 시뮬레이트하십시오 처리 중이고 총 가격에 56을 더했습니다

~하지 않는다 할인을 위해 일한다 왜? 내가 이벤트를 만들지 않았기 때문에 할인하고 지금 당장 할거야 여기에 새로운 이벤트를 만들어 보겠습니다 할인 필드를 이벤트의 트리거로 사용하는 새로운 Ajax 이벤트 onChange 처리 이벤트를 사용합니다

나는 똑같은 것을 부를거야 여기, "upd_price" 다시 해보자 보자, 이것을 백개로 만들자 50을 놓고 250으로 돌아가려면 여기에 50을 놓으십시오

자, 이제 총 가격 및 가격과 동일합니다 따라서 값을 변경하면 지금 업데이트됩니다 추가 요금 및 할인 저장하면 정보가 저장됩니다 데이터베이스의 모든 네 필드에 대해 나는 두 가지 일을 할거야

시작 날짜에 대한 이벤트와 시작 시간에 대한 이벤트 중 하나 기본적으로 작성한 다른 메소드, 즉 채우기 값입니다 그래서 여기에서 선택합시다 시작일 "onChange" "fill_values"라고 부르 자

저장하십시오 너는 보이지 않을거야 종료일이 화면에 표시되지 않기 때문에 화면의 모든 수정 화면 그래서 당신은 그것을 보지 않을 것입니다 "onChange", "fill_values"

괜찮아, 응용 프로그램을 실행 해 봅시다 이 응용 프로그램은 부분적으로 완료되었습니다 생각해 내다 서비스라고하는 세 번째 블록을 만들었습니까? 글쎄, 그건 세부 응용 프로그램이 들어 있습니다 이제 폼 응용 프로그램을 만듭니다 "새로운 응용 프로그램 "양식의 형식, 약속 세부 테이블을 사용하지만, 그것은 다른 이름을 지어야한다

그것은 "form_request_appointment_details"가 될 것입니다 그것을 창조합시다 응용 프로그램을 실행 해 보도록하겠습니다 무엇이 표시되고 있는지 3 개의 필드 밖에 없어요

나는 두 개를 제거 할거야 그들 우리가 약속을 표시 할 현장 위치 지정으로 가자 유형 ID 세부 정보 ID 및 약속 ID는 표시되지 않습니다

그래서, 그것을 저장하고이 필드에 대한 선택 검색 방법을 설정하도록하겠습니다 여기에 약속 유형을 입력하고 ID 설명을 삽입하십시오 저장하십시오 물론이 응용 프로그램은 하나의 필드 만 표시 할 수는 없습니다 다른 두 분야가있을 것입니다

방금 다른 두 개를 제거했습니다 아니 Scriptcase를 사용하면 주로 가상 필드를 만들 수 있습니다 계산 목적 및 일시적인 표시 문제 그래서, 나는 만들거야 두 개의 필드

둘 다 타입 라벨이 될거야, 알았지? 첫 번째는 기간이 될 것이고 다음은 가격이 될 것입니다 그걸 만들자 지금, 응용 프로그램을 실행하면 무엇을 정확하게 이해할 수 없을 것입니다 그것은 단지 이것을 보여주고 있습니다 나는 그 방향을 바꿔 보자

폼의 필드 편집 가능한 눈금보기로 설정하겠습니다 에 보내기 편집 가능한 격자보기, 필드는 격자 모양으로 표시되며, 각 필드에 대한 정보를 수정하십시오 나는 아직도해야 할 일이있다 내가 할 수 있도록 PHP 메소드를 만들 예정입니다

기간과 가격에 대한 정보를로드하십시오 그럼, 다시 가자 여기, 프로그래밍> PHP 메소드> 새로운 메소드로 가자 이것을 "get_price"라고 부르십시오 그것을 창조하십시오

이 메소드의 코드를 여기에서 보자 저장소에 "Forms_request_appointment_details" "가격을 내라" 좋아요

코드는 이것에 기반하여 각 서비스의 기간과 가격을 검색합니다 내가 여기서하고있는 쿼리를 선택하십시오 기간, 약속 유형의 가격 여기서 약속 ID- 실제로 약속 유형 ID = 약속 유형 ID, 알 겠어? "upd_master"라는 또 다른 메서드를 만들려고합니다 이 방법은 정확히 무엇입니까? 그것을위한 코드를 얻자 첫 번째 부분 다른 응용 프로그램 인 양식 약속에서 본 것과 거의 같습니다

여기에 데이터가 있습니다, 알았죠? 여기에 또 다른 조회가 진행 중입니다 추가 요금, dicounts, 약속 시작 시간부터 내가 현재 가지고있는 appointment_id를 기반으로 한 약속 자체 응용 프로그램, 그리고 우리는 시간을 기반으로 몇 가지 계산을하고 있습니다 물론, "sc_exec_sql"매크로를 사용하여 특정 레코드를 업데이트하고 가격 변수 및 종료 시간 (여기는 약속 ID = 현재 레코드의 약속 ID가 열려 있습니다 하지만이 코드는 그것은 정확히 무엇입니까? 좋아, Scriptcase 는 마스터 응용 프로그램의 정보를 업데이트 할 수있는 기능이 있습니다 세부 응용 프로그램은 "SC 마스터 값"이라는 기본적으로 하나의 매크로를 사용합니다

전달하는 첫 번째 매개 변수는 실제로 필드의 이름입니다 마스터 응용 프로그램에서 업데이트하고 두 번째 매개 변수는 값입니다 그들은 그것을 지나치 길 원합니다 무엇이 포함되어있는 다른 줄은 무엇입니까? "sc_format_num"? 이 매크로를 사용하면 정보를 보내기 전에 정보를 포맷 할 수 있습니다 마스터 응용 프로그램에, 알았지? 자, 이제이 함수들을 어디에서 호출할까요? 우리가 만든이 방법들? Ajax 이벤트를 만들겠습니다

"onChange" 약속 유형 ID 이벤트를 만들어 보겠습니다 할거다 이 행사에서 가격을 불러주세요 알았죠? 그럼, 이걸 복사하겠습니다 나는 또한 전화 할거야

이 경우에는 "로드 중"레코드입니다 편집 가능한 그리드이므로이 이벤트가 실행됩니다 한 번 화면에로드 된 각 레코드에 대해, 그래서 그것을 여기에 놓습니다 그것은 정확하게 할 것입니다 각 레코드에 대해서도 똑같이

그걸 구합시다 이제 나는 그것을 모든 약속 유형에 대해 기간 및 가격을 지정합니다 그래서, 기본적으로, "파일 백업"으로 변경하면 잠깐, 이상하게 들린다 죄송합니다 정확히 알고 있지 않습니다 Scriptcase 9에있는 버그는 현재 내가 Scriptcase 회사와 직접 일하는 것도 아닙니다 나는 거기에서 일했었다

그들은 저에게이 수업을 해달라고 부탁 했었습니다 그러나 솔직히 저는이 수업을 정말로 모르고 있습니다 버그 나는 지금 당장이 과정 전반에 걸쳐 그들에 대한 지식을 얻었습니다 그래, 다른 문제가 나타나면 사전에 사과하고 싶습니다

스크린없이 나를 알지 못한다 내가 놓아야했던 다른 방법은 upd 마스터 이제 onAfterInsert에서 다시 돌아가 봅시다 "석사" 그래서, 그것은 마스터 응용 프로그램의 정보를 매번 업데이트 할 것입니다

레코드를 업데이트 할 때마다 레코드를 삽입하십시오 레코드를 삭제할 때마다 그래서이 레코드를 삭제할 때마다 신청서, 알았지? 소스 코드를 생성하겠습니다 나는 그것을 실행하지 않을거야 이걸 닫으시고 양식 약속으로 다시 가자 응용 프로그램과 마스터 세부 사항을 만들자, 알았지? 나는 그것을 부르겠다

"요청" 몹시 떠들어 대다 "form_request_appointment_details"를 호출 해 봅시다 다음 것 기본적으로 약속 ID를 설정하려고합니다

저장하여 화면에서 어떻게 작동하는지 봅시다 좋아, 보자 내가 바꿀 경우 기다려 좋아 작동하고있어 그냥 여기에 가격을 제거, 나는 그것이 작동하지 않는 줄 알았는데 하지만 효과가 있습니다

250,00 이었지, 그렇지? 그냥 100 아래로 내려 가자 설치 바이러스 백신 제거 다시, 100 80 할인 때문에 여기에 새로운 것을 시도하자

하나 파일 백업 150, 130까지 올라갈거야 그래서, 효과가 있습니다 내가 만든이 응용 프로그램을 추가하겠습니다 – 둘 다, 실제로 – 그리드 양식 서브 메뉴

프로젝트의 집으로 돌아가 보겠습니다 메뉴에서 admin이라는 항목을 만듭니다 그것을 올려 놓으십시오 "관리자" 나 여기있어 약속 만들기 "를 설정합니다

여기에서 양식 약속을 선택하십시오 그리고 "약속 보고서"

"grid_appointments_adm", 알았지? 잠깐 시간을 내자, 알았지? 그래서, 나는 여기에로드했습니다 그것이 만들어야하는 것처럼 보입니다 약속 보고서에 여기 약속들과 짐을 싣고있어, 알았지? 그래, 이 응용 프로그램은 끝났습니다

다음 단계로 넘어 갑니 이것들은 관리자 용 응용 프로그램이었습니다 고객을위한 신청서, 괜찮습니까? 이제 이것들을 닫아 보겠습니다 고객 모델을위한 몇 가지 응용 프로그램 고객은 무엇의 목록을 선택할 것인가? 그가 계획해야하는 서비스는 "실행"요청에 의해 요청이 생성됩니다

버튼을 클릭하고 고객을 양식 선택 날짜 및 시간으로 리디렉션합니다 그가 선택한 후 약속 그는 모든 사람과 함께 보고서를 리디렉션합니다 그의 약속 좋아, Douglas가 나에게 "어디에서 가장 좋은지 물었다

매크로에 대한 설명 " Simple"Scriptcasenet "> "e- 러닝"> "문서"> "영어"> "매뉴얼 읽기"그리고 매크로 부분이 있습니다 이리

매크로 그리고 그것의 유형별로 구분됩니다 SQL 조작 매크로 여기에는 날짜, 컨트롤 유형, 필터, 보안, 표시 목적, 단추, PDF, 메뉴 목적 좋아요? 더 이상 질문하지 않습니까? 괜찮아, 계속하자 먼저 그리드 애플리케이션을 만들자 약속 유형 테이블이지만 그 이름은 "grid_appointments_type"이 될 수 없습니다 그것은 "새로운 요청 카탈로그"가 될 것입니다 나는 where 절

사실 여기에 where 절을 추가 할 것입니다 활성화 된 곳 = 왜, 알았지? 따라서, 활성 약속 유형을 우리의 데이터베이스 현장 배치를 위해 여기에 들어가서 한 쌍을 제거합시다 전지 나는 단지 설명, 기간 및 가격을 보여주고 싶었다

좋아요, 저장하고 상단 툴바에서 모든 항목을 제거해 보겠습니다 버튼 그래서, 내가 그들을 제거하자 좋아, 구해 응용 프로그램을 실행시켜 보도록하겠습니다

사람들은 그것이 무엇을 표시하는지 정확히 볼 수 있습니다 우리가 보았던 종류의 우리 이전 신청서, 알았지? 하지만 나는 너희들에게 버튼 타입을 보여줄거야 "버튼 실행 (button run)"이라고 불렀지 만 먼저 여기에 복사하여 저장소에 액세스해야합니다 사용할 루틴 나는 이걸 복사 해 드리겠습니다

onScriptInit 글쎄, 여기에 정확히 무엇을하는지 설명하겠습니다 우리는 PHP 함수 인 unset은 글로벌 변수 또는 세션을 설정 해제합니다 PHP에서 변수, 그리고 당신이 볼 수 있듯이, 다음과 같이 선언하고 있습니다 변수가 배열이 될 것입니다

그런 다음 다른 전역 변수를 준비 중입니다 변수 "i"는 0이되는 카운터가 될 것입니다 "duration_checked"가있을 것입니다 이는 금액이기도하고 시작하는 것입니다 0에서 "price_checked", 괜찮습니까? 우리는 이것을 저장하고 여기 버튼으로 가자

새 단추 왜 내가 그 변수들을 정확히 만들었습니까? 왜냐하면 정보를 얻으려는 경우 실행 버튼으로 작업해야합니다 선택한 레코드의 나는 그것을 부르겠다 "의뢰" 자, 요청 버튼의 편집 부분입니다

그것 onRecord 이벤트가 있고 onFinish가있는 두 가지 이벤트를 지원합니다 그래서 응용 프로그램에서 선택된 각 레코드에 대해 실행됩니다 예를 들어, 내가 뛰게하십시오 응용 프로그램, 그래서 당신은 사람들이 정확히 무엇을 요구하는지 볼 수 있습니다 우리는 이것들을 설정할 것입니다

2 아웃 보시다시피, 이제 레코드에 대한 확인란을 구현했습니다 다 좋아? 실행 버튼에서만 사용 가능합니다 코드를 붙여 넣어야합니다 여기 내가 onRecord 코드로

내가 얻을 수있는 – 나는 지역 변수를 선언한다 그 자체가 카운터를 가지고 있고, 그리고 나서 나는 bidelimensional aray를 만듭니다 신분증 수표는 배열입니다

저는 카운터의 위치를 ​​얻고 약속 유형 ID를 입력 한 다음 기간 확인 및 증분 수표 기록의 기간 필드 그런 다음 가격에 대해 동일한 작업을 수행합니다 카운터를 확인하고 증가시킵니다 좋아, 여기에 onFinish 좋아요, 그래서 여기에 그 모든 정보를 얻으면 내일의 날짜를 계산합니다 시간, 가격 합계, 기간 합계 및 약속에 삽입 – 새로운 약속, 실제로 – 모든 필요한 정보 이 "glo_customer_id" 우리가 선언 할 때 선언 될 전역 변수가 될 것입니다 이 프로젝트의 로그인 응용 프로그램을 만듭니다

나는 그것이 8 번째가 될 것이라고 생각한다 클래스 또는 일곱 번째 클래스 사실 다음 주에 갈 것입니다 이것을 삽입하는 중 정보를 약속에 넣은 다음 다른 매크로를 사용하고 있습니다 "sc_select"라고합니다

이 매크로는 사실 "sc_lookup"과 유사하지만 차이점은 내가 말한 것처럼 sc 조회가 기본적인 배열을 반환한다는 것입니다 이 이 경우 실제로 결과 집합이나 데이터 집합을 반환하므로 수동으로 수행 할 수 있습니다 이전의 모든 데이터를 검토하십시오 얻기 체크 된 항목의 양, 나는 각 항목을 통과하고 그들을 삽입하고있다 약속 세부 사항에, 알았지? 그 후, 나는이 방향으로 리디렉션 할 것이다

아직 양식을 요청하는 약속 인 응용 프로그램을 만듭니다 다 좋아? 계속하기 전에 전역 변수를 밖으로 설정하십시오 모든 것이 만들어지면 내가 보여줄거야 달리기, 괜찮 니? 자, 이제 다음 응용 프로그램을 만들어 봅시다 실제로는 다음과 같은 형식입니다

약속을 요청하십시오 약속에 기반 할 것입니다 "form_request_ 약속들 " 자, 이제 표시 할 필드를 선택하겠습니다 시작 날짜 및 시작 시간, 총 가격, 종료 날짜 및 종료 시간

좋아, 여기에 가자 들판들, 총 가격을 라벨로 정할거야, 알았지? 그리고 나는 갈거야 툴바에서 모든 버튼을 제거하고 저장 버튼을 상단 툴바의 중심 그래서, 이것들을 제거하십시오 여기 아래 모든 것들 자, 요일이라는 가상 필드를 만들자

그것은 정수가 될 것입니다 요일 그리고 나는 그것을 숨겨진 필드로 설정할 것입니다 자, event onLoad,이 루틴 코드를 추가하겠습니다 시작일 필드를 기준으로 한 요일을 알 수 있습니다

자, 결국 날짜는 실제로 시작일부터 시작됩니다 더 의미가 있습니다 선택이있다 사실 그 필드에 장소를 원한다는 쿼리 이 하나

예 시간 입력란은 실제로는 검색어 입력란을 포함하는 선택 입력란입니다

내가 직접 시간 값을 선택할 수 있도록 할 것입니다 방법? 이번은 테이블 약속 시간에 가능하다 좋아, 이제 필드 끝 날짜와 끝 시간이 숨김으로 설정 될거야, 알았지? 내게 알려줘 내가 무슨 일이 일어나고 있는지 정확히 알 수 있도록 응용 프로그램을 실행하십시오 이미 수정을 많이 했으므로 직접 회사를 운영 할 수 있습니다

어디 보자 괜찮아, 그래서 이것은 지금처럼 생겼습니다 아무 문제 없습니다 그래서 그것에 대해 노력하고 가자 여기 JavaScript 부분에 대해 설명하고 자바 스크립트 이벤트를 만들어 보겠습니다

이 양식 및 제어 응용 프로그램에만 사용할 수 있습니다 나에게 JavaScript 코드를 기반으로 이벤트를 만들고 객체를 선택할 수있게 해줍니다 그 사건을 일으킬 것입니다 이 경우 시작을 선택하겠습니다 JavaScript 이벤트에서 onChange를 트리거 할 날짜를 지정합니다

그래서, 여기에서 편집을 클릭하겠습니다 그게 내가 일상을 알릴 수있게 해줄거야 이 메서드는 여기,이 자바 스크립트 함수는 "nm_recarga_form"라는 Scriptcase의 JavaScript 내부 기능 그것이하는 일은 기본적으로 전체 양식을 새로 고칩니다 알았지, 알았지? 이제 두 가지 PHP 메소드를 만들 예정입니다

가자 "필드", "이벤트" 프로그래밍> PHP 메소드> 새로운 메소드 좋아, 첫 번째는 "chk_date"라고 할 것입니다

권리? 여기 정보를 얻었 어, 알았지? 여기에 정확히 무엇을하는지 설명하겠습니다 코드가 실제로 날짜를 확인합니다 그건 통보 받고 있습니다 선택한 날짜가 실제 날짜보다 낮은 지 확인합니다 날짜와 같거나 날짜와 동일합니다

그럴 경우 날짜가 잘못되었다는 오류가 발생합니다 오늘보다 더 높아야합니다 시간이 지났 으면 날짜가 맞는지 확인하십시오 가능하면 휴일이 있는지 확인하십시오 그래서, 그것은 여기 그리고 테이블 "unavailable_dates"

"sc_selects"를 통해 이동합니다 전체 데이터 세트를 살펴 보겠습니다 여기 논리가 어떤 종류입니까? 매일 시간을 정한다 이 논리를 살펴 보겠습니다 사실 조금 혼란 스럽습니다

그리고 마지막에는 연결을 끊습니다 정보를 얻을 때 사용자의 날짜를 확인합니다 괜찮아, 여기에 "fill_values"라는 또 다른 메서드를 만들어 보겠습니다 우리가 만든 다른 응용 프로그램 및 확실히 동일한 코드, 알았지? 좋아, 내가 구해줘 이제 onValidate에 코딩을 추가하겠습니다

start 이벤트에 대한 onChange 이벤트와 Ajax에있는 onChange 이벤트 시작 시간 그럼 내가 유효성을 검사하러 가자 그것은 기본적으로 같은 것입니다 그것은 그것들 각각을 검증 할 것입니다 여기 유효성 검사로 가자

이 경우이 양식의 정보를 제출하면 이벤트가 실행됩니다 절약 할 때 여기에 시작 날짜와 시작 시간에 대한 이벤트가 생성됩니다 예, 시작일에 이미 자바 스크립트 이벤트가 있지만 다시 할 수 있습니다 Ajax와 같은 것

그래서, 그것은 일종의 두 가지 사건이 있습니다 가치 변화 좋아, 시작일은 onChange 똑같이 확인해 그래, 기본적으로 같은

다음 시간, 시작 시간입니다 여기 붙여 넣으세요, 알았죠? 저장하십시오 좋아, 지금, 내가 뭐야? 사실,이 애플리케이션에 실제로 새로운 블록을 추가 할 것입니다 전화하자 그것은 "세부 사항", 왜냐하면 그것은이 응용 프로그램에 대한 세부 사항을 가지기 때문입니다

오토 내가 만든 기본 응용 프로그램을 사용하려고합니다 ~없이 레이블도 실제로 새로운 새로운 세부 사항을 만들어 보겠습니다 그것을 "세부 사항"이라고 부르십시오 "form_request_appointment_details"

약속의 ID를 전달하면, 또한 자,이 응용 프로그램을 실행하자 나는 그것을 조금 남겨 둘 필요가있다 더 두꺼운 500 픽셀을 시험합시다

알았어 할인을 표시하지 않기 때문에 130을 보여주고있다 추가 비용도 없습니다 좋아,이 응용 프로그램은 여기있다 끝마친

그래서이 아이디어 카탈로그는 요청 카탈로그를 실행할 때 일종의 것입니다 미안합니다 깜빡했습니다 여기에 한 가지만 놓으려면 업데이트하십시오 여기에는 유효성 검사가 있습니다 의 다른 필드로 나를 리디렉션합니다 사실, 다른 응용 프로그램, 깜빡 했네

이것에 대해 "onAfterUpdates" 좋아요, 그래서 여기에서는 약간의 유효성 확인을합니다 애플리케이션에 액세스 한 사용자에게 이메일을 보내고 이제는 역사를 창조하기 때문에 나는이 특정 약속의 역사를 가지고있다 업데이트 된 다음 고객의 그리드 약속으로 리디렉션됩니다

그래서 나는 아직 전체 시스템을 실행할 수는 없습니다 이 그리드 약속을 만들어 보겠습니다 고객 소스 코드를 생성하겠습니다 자, 약속을 기반으로 그리드를 만들자

이름이 될거야 "grid_appointments_customer"이고 where 절이 있습니다 내가 여기서 확인하자 이리 그것은 SQL입니다 "어디", 고객 ID = 전달 된 것입니다 그것을 창조합시다 내가 원하는 건, 약속 ID, 시작 날짜, 시작 시간을 원해

직원 ID 및 총 가격 등급이 표시됩니다 "약속 ID", "시작 날짜 ","시작 시간 ","직원 ID ","총 가격 "및"등급 "을 입력하십시오 그리드 모듈을 비활성화하고자 할 때, 예를 들어, 세부 사항은 여기에서이 표시를 선택 취소해야합니다 나는 싫어 사용자가 요약 차트에 액세스하거나 검색 할 수 없습니다

그리드만으로 충분합니다 그를 앱을 실행하면 지금은 그대로, 고급 스러움없이 3 개의 점들없이 나에게 이것을 보여줍니다 검색은 여기에서도 가능합니다 이제 Scriptcase로 돌아가 보겠습니다

상단 툴바에서 모든 버튼을 제거하려고합니다 그래서, 이것에 대한 수출은 없습니다 사용자, 또한 onRecord에 대한 루틴이있을 것입니다 그래서, 그것은 이 사용자에 대해로드 된 각 레코드에 대해 실행하십시오 그럼, 여기로 가자

"onRecord" 좋아요, 저장하고 상태 ID를 기준으로 정적 그룹을 만들어 보겠습니다 "Static Group By"> 새로운 그룹 상태를 사용하여 여기에 상태를 부릅니다 내가 이것을 구 하마 나는 그것을 다시 시도 할 것이다, 내가 여기에 그것을 설정할 수 있는지 보자 "오토매틱" 선택, 서면 상태 작성

좋아요 나는 아직도 해요 아직 그것을 실행하지 않을거야, 내가 여기서해야 할 일이있다 "세련된 검색 "필드를 선택하겠습니다 현재 상태 ID가 될 것입니다

여기에 현재 상태 ID, 약속 시작 날짜, 직원 ID 및 총 가격이 표시됩니다 저를 저장하겠습니다 여기서 편집 필드에 설정하겠습니다 총 가격은 내가 원해 다중 선택중인 직원 ID, 현재 상태에 따라 5 씩 증가하는 범위 설정 복수 선택 중

하지만 현재 상태 ID를 직접 수정하려고합니다 여기에서 그리드에 대한 조회 설정을 적용하십시오 자, 응용 프로그램을 실행 해 봅시다

이상하다, 지금 보여주고 장난 해 그래, 내 실수 야

그건 버그가 아니야 이것에 대한 조회 설정을 지정하겠습니다 직원 ID, 잊어 버렸어, 네 진지하게, 나는 여기에서 나 자신을 부끄럽게 생각하고 있었다 와아 봐, 난 정말 모르겠다 실제로는 다른 그리드에서 설정 한 설정과 동일하기 때문에 그리고 일하기로되어 있었지만, 왜 다른 하나가 이건 작동하지 않습니다 사실, 다른 하나는 작동하지 않았고, 이것은 하나입니다

기다려 나는 그것이 이것을 설정하지 않았다고 생각한다 바르게 그래, 신경 쓰지 않았어 저 사람들이 스탭이야, 알았어

알았어, 이제 여기 정확히 올랐어 단계별로 올바른 단계를 수행합시다 어떤 요청이라도 여기서 실행합시다 그래서 파일 백업을 원한다고 가정 해 봅시다 내 하드 드라이브를 포맷하고 싶습니다

그걸 요청합시다 기다림 내가 잊어 버린 한가지 여기에서 변경하십시오 그래서, onRecords 고객 ID 그것은 0이 아니며, 5입니다 괜찮아 코드에 오류가 있습니다 좋아, 다시 해보자 백업을하고 하드 드라이브를 포맷하고 싶었습니다

이것은 사용자 로그인입니다 그들은 내가 여기에 사용자 로그인이 필요하다고했는데, 나는 그것을 기억하지 않는다 오, 알았어 그럼 너는 없어 업데이트 미안 해요, 이런 일들은 개발할 때 일어납니다

실행 중입니다 다시 시도해 봅시다 "파일", "형식", "요청" 좋아요 그래서 여기에 파일 백업과 포맷 하드 드라이브가 있습니다

여기, 알았지? 오늘보다 커야합니다 여기에서 선택합시다 그리고 그것을 원합니다 그들은 이미 저를 위해 그것을 제안합니다 "금요일, 16" 좋아요, 그럼 그걸 저장합시다 이봐 요, 진지하게 기다려 그 사용자는 어디 있습니까? 그냥 여기 로깅 해 좋아, 여기에 뭔가를 집어 넣자 그것 이것은 데이터베이스에 빈 값을 돌려주기 때문에 일시적입니다

다시는하지 않아도됩니다 내가 말했듯이, 다시, 그것은 일어난다 여기로 이동하여 하드 드라이브와 나는 안티 바이러스를 원한다 "150" 좋아요, 지금 저장합시다

좋아, 여기 이쪽으로 방향이 바뀌었지만 그게 그래, 나 한테 모든 약속을 보여주고있어 실제로 내 고객 ID를 설정 했으니 여기 모든 정보를 보여주는 것 같네요, 알았죠? 그래서, 얘들 아, 그냥 메뉴의 고객 부분에 설정하자

내게 알려줘 여기 열어 여기에 새 것을 추가하겠습니다 "고객" "새 요청"

그리드를 설정하십시오 그리고 "나의 약속"

"Grid_customers" 좋아요, 그러면 작동합니다 좋아, 더글라스가 나에게 더 나은 설명을 부탁했다 조회 및 선택 매크로의 차이점 괜찮아

예를 들어, 내가 말했듯이 조회 설정은 일종의 준비가되어 있습니다 조금 더 간단한 코딩으로 접근 할 수있는 당신이있을 때 사용하지 않는 것이 좋습니다 좋아요, 뭐라 구요? 1,000 기록 메모리에있는 모든 레코드를로드하고 있기 때문에 사용하지 않는 것이 좋습니다 때로는 서버가 손상 될 수 있습니다

그러나 "SC select"를 사용할 수 있습니다 왜냐하면 일종의 페이지 매김을 할 수 있고,이 10 개의 레코드를 먼저 실행하고 그것은 당신에게 돌아갑니다 그래서, 당신은 그 고리를 통과 할 수 있습니다 순수한 PHP에서 작업하는 경우 모든 데이터 세트의 다른 루프를 통해 다른 질문? 아놀드, 나 Scriptcase가 제공해야하는 다른 코스를 추천합니다

개발자 과정 그것은 이전에 저에게 주어졌으며 저는 순수 SQL, 순수 HTML, 순수 CSS, JavaScript 및 PHP를 엿볼 수 있습니다 그 후, 나는 모든 사람들에게 Scriptcase에서 이러한 개념을 사용하는 방법을 보여주었습니다 그래서 나는 마샤에게 연락해서 그녀에게 그 과정에 대해 물어볼 것을 권유합니다, 알았죠? 도움이 될 수 있습니다 너는 나간 것 같아

좋아, 그 다음엔 좋은 저녁이있어, 내가 볼거야 내일 너희들도 같은 시간에, 알았지?

Get started developing apps with SQL Server 2017 running on Linux

[음악] 안녕하세요, 제 이름은 David Salgado입니다 저는 데이터 팀의 제품 관리자로 일하고 있습니다

이 동영상에서 나는 다음 단계를 거쳐 Linux에서 SQL Server를 사용하는 응용 프로그램입니다 상상할 수 있듯이 응용 프로그램의 경우 Linux 또는 Windows에서 SQL Server에 데이터를 호스팅하고 있습니다 하루가 끝나면 연결 고리가 될 것입니다 그리고 온 – 프레미스 (On-Premises)의 경우 클라우드에 있는지 여부는 중요하지 않습니다 그 연결 문자열에 대한 변경 사항 일뿐입니다

그러나 개발자는 모든 것을 설치해야 할 수도 있습니다 너의 기계, 그게 우리가 너를 따라갈거야 설치, 비용, 연결 및 배포 방법 OSX 또는 Linux가 주 OS가 될 것이라고 가정합니다 그리고 내가 설치를 말할 때, 나는 Windows와 마찬가지로, 우리는 기본 설치 패키지를 가지고 있습니다 이제 Linux 사용자라면 Suse, Red Hat 또는 우분투 패키지

우분투 사용자 인 경우, Linux에서 MS SQL Server를 사용할 수 있습니다 물론 Windows와 Linux 모두에서 Docker Images를 사용합니다 일단 데이터베이스를 설치하면, 당신이 그것을 관리해야합니다 그리고 보통 Windows에서는, SQL Server Management Studio, SSMS를 사용하면됩니다 Windows의 SSMS를 사용하여 Linux의 SQL Server에 연결할 수 있습니다

기계 그러나 우리는 당신에게 보여주고 싶은 두 가지 새로운 도구를 가지고 있습니다 하나는 Visual Studio 코드 확장입니다 또 하나는 SQL Server 용 명령 줄 도구입니다 일단 설치하고 모든 데이터베이스로 데이터베이스를 만들면 테이블, 우리는 연결 지점이 있습니다

해당 연결 문자열을 어디에 만들지, 특정 드라이버를 사용하여 응용 프로그램을 데이터베이스 서버 우리는 모든 언어와 그 이상을위한 커넥터를 가지고 있습니다 또한 언어를 찾지 못하면 개인적 취향에 대해 알려면 알려주십시오 그 다음에는 귀하의 응용 프로그램이 끝나면 오늘 데모에서 NodeJS를 만드는 방법을 보여 드리겠습니다 Linux의 Docker Image에서 호스팅 될 응용 프로그램입니다 그리고 우리는 몇 가지 관리 도구를 사용하여 얘기 했어

그러나 또한 저는 여러분에게 몇 가지 다른 특징들을 보여 드릴 것입니다 SQL 서버 SQL Server를 스위스 육군 칼으로 생각하면 상점에 보관할 때 정보를 검색하고, 우리는 단지 이쑤시게를 사용하고 있습니다 우리는 우리가 사용할 수있는 모든 기능을 이용하지 않습니다 특히 이번 새 버전의 SQL Server에서, 모든 프로그래밍 기능에 액세스 할 수 있습니다

엔터프라이즈, 개발자 또는 표준 버전의 제품에서 사용할 수 있습니다 그러나 SQL Server 2016을 사용하는 경우, 서비스 팩 1을 설치해야 함을 알려드립니다 11 월에 발표했습니다 일단 설치하면 다음과 같은 모든 기능에 액세스 할 수있게됩니다 SQL Server의 모든 에디션

데모로 가자 그래서 우리는 리눅스에 SQL Server를 설치하는 것으로 시작합니다 이를 위해 몇 가지 옵션이 있습니다 그리고 우리는이 측면에서 귀하의 선호하는 언어 이 경우 우리는 macOS에서 NodeJS로 작업 할 것입니다

그래서 여기를 클릭하면 OS에 대한 지침이 있습니다 그래서 나는 약간의 시간을 절약하기 위해 이미 그 단계들을 거쳤습니다 내가 여기 온다면, Docker 옵션을 선택했습니다 그래서 내가 부두 이미지를 확인한다면, 우리는 여기서 sql-server-linux를 갖게 될 것입니다 또한 서버 플러스가있는 다른 이미지가 있습니다

도구 플러스 커넥터 및 프레임 워크 하지만이 경우 기본 기계를 사용할 것입니다 그리고 저는 이미 여기에 당신을 보여줄 수있는 컨테이너를 만들었습니다 그것은 SQL Server Linux 기반 이미지입니다 그리고 나는 이미 그것을 만들었 기 때문에 sql-employees라고 불렀습니다

데이터베이스와 나는 이미 약간의 정보로 데이터를 채웠다 그 컨테이너를 시작하자 docker가 sql_employees를 시작한다 그리고 시작하자 마자, 지금은 데이터베이스를 관리해야합니다 우리는 정보를 삽입하거나 색인을 생성하거나 우리가해야 할 일은 뭐든간에

그리고 그 전에 제가 말씀 드렸듯이 명령 줄 도구를 사용할 수 있습니다 mssql 나는 localhost 인 서버에 연결할 것이다 나는 암호 EgunOn17로 사용자 sa를 사용할 것이다 바스크에서 좋은 아침을 의미합니다

그리고이 쿼리를 실행하고 @@ version을 선택합니다 SQL Server에 연결하는 중입니다 그러나 공통 선 도구를 사용하는 대신, 나는 Visual Studio Code를 사용할 것이다 우리는 무료이며 마켓 플레이스에서 찾을 수 있습니다 그리고이 확장으로, SQL 파일로 인식되어 SQL 파일로 인식되면, 아래에서 볼 수 있듯이 SQL 명령을 사용할 수 있습니다

이런, 내가 연결하는 데 사용할 수있는 SQL 명령 [LAUGH] 연결 해제, 쿼리 실행 등 그래서 Connect를 클릭하면 이미 작성한 모든 프로파일 목록을보십시오 이것은 확장 기능을 말하는 것일뿐입니다 내 서버는 어디에 있습니까? 어떤 데이터베이스를 사용하고 싶습니까? 사용자는 무엇입니까? ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ 나는 VideoAMP를 여기에두고있다

이제 VideoAMP에 연결해야합니다 따라서 Visual Studio 코드에서 쿼리를 선택하고 실행할 수 있습니다 이것은 명령 행에서 실행하는 것과 같습니다 그리고 이것은 우리에게 당신이 어떤 것을 가지고 있다는 것을 보여주는 또 하나의 간단한 질의 일뿐입니다 데이터를 데이터베이스에 저장합니다

그래서 우리가 이것을 보았 으면 다음 단계는 응용 프로그램을 연결하는 것입니다 나는 리눅스에서 SQL Server로 만들었습니다 이 경우 Node를 사용하고 있습니다 그리고 Node를 사용하면 지루하고 지루한 것은 실제로 TDS에서옵니다 약어는 [웃음]을 사용하여 SQL Server에 연결하는 프로토콜

커넥터를 만드는 CCS입니다 연결하고 완료 할 데이터베이스 이 프로그램을 실행하면, 우 – 후, 여기에 작은 변화를 만들어 봅시다 당신은 그것이 실제로 일어나는 것을 봅니다 노드 헬로우 월드

우 – 후, 연결 완료 슈퍼 쉽습니다 그러나 일반적으로 드라이버를 직접 사용하지는 않습니다 개발자는 일반적으로 ORM을 사용합니다NET을 사용하는 경우 [INAUDIBLE] 프레임 워크를 사용하고 있습니다 노드를 사용하고 있다면, 아마도 Sequelize를 사용할 것입니다 그래서 우리는 여기서 같은 프로토콜을 사용합니다 나는 Sequelize를 사용하고, Sequelize는 지루한 것을 사용합니다 나는 어떤 데이터를위한 것인지 지정한다

내가 연결할 데이터베이스 그리고 이것은 웹 사이트에서 찾을 수있는 매우 간단한 코드입니다 사용자를 생성하고, 작업을 생성하며 사용자와 작업에 약간의 작업을 수행합니다 그것을 지정하면, 데이터 변경, 날짜 변경 및 작업 삭제 등이 있습니다 따라서이 샘플을 실행하면 노드 ORMdemo가 실행됩니다

여기 아래에 그것이 효과가 있다는 것을 알게 될 것입니다 그리고 출력물에 콘솔로 전송 된 모든 정보 또한 저는 몇 가지 기능을 공유 할 것이라고 말했습니다 일반적으로 개발자가 인식하지 못합니다 개발자로서, 우리가 저장하기 때문에 우리는 모른다

정보를 검색하고 정보를 검색합니다 먼저,이 JSON 기능에 대해 생각해 봅시다 개발자는 쿼리를 실행합니다 이 쿼리는 우리에게 테이블을 되돌려줍니다 그런 다음 테이블을 통과합니다

더 많은 정보를 수집하기 위해 데이터베이스로 돌아갑니다 우리가 가지고있는 정보 그래서 우리는 서버를 가지고 앞뒤로 질의를합니다 우리는 사물의 애플리케이션 측면에서 필요한 계층을 구축하십시오 그래서 그렇게하는 대신 JSON 또는 XML 및 실제로 서버에서 계층을 반환합니다

그래서 우리는 객체와 객체 간의 관계를보다 잘 표현할 수 있습니다 데이터베이스에서 오는 정보만으로 그래서, 당신도 알다시피, 같은 쿼리 JSON에서 정보를 반환하기를 원합니다 그리고 이것이 내가 사용할 루트 노드입니다 내가 처형하게 해줘

그리고 물론 이것은 당신에게 약간의 변경을 요구할 것입니다 응용 프로그램 측면 신청서를 보낼 준비가되어 있어야하고 데이터베이스에서 JSON을받습니다 그러나 이것은 매우 편리합니다 여기에서 볼 수 있듯이, 이것은 테이블의 정보 일뿐입니다

내가 지정한 노드와 그러나 나는 항상 내가 할 수있는 형식으로 조금 더 연주 할 수있다 데이터베이스에서 나를 보내야합니다 여기서 볼 수 있듯이, 나는 사원 개체를 만들었고, 나는 만들었습니다 연락처 엔티티이며 응용 프로그램 쪽에서 사용할 수 있습니다 저장하지 마십시오

그리고 이것은 여러분이 사용할 수있는 기능이었습니다 하지만 응용 프로그램 측면에서 무언가를 변경해야합니다 다음은 Columnstore 인덱스입니다 애플리케이션 측에서 아무 것도 변경할 필요가 없습니다 우선이 표를 만들어 보겠습니다

이것은 기본적으로 이름에서 알 수 있듯이, 5 백만 행의 테이블과이 쿼리를 실행할 것입니다 이 쿼리를 실행할거야 우리는 합계를 계산하는 데 얼마나 많은 시간이 걸리는지 알고 있습니다 5 백만 행이있는 테이블에있는 기둥 중 하나의 나는 그것을 실행한다 그리고 이것은 900 밀리 초 정도 될 것입니다

나는 이것을 다시 실행 시켜서 이것이 꽤 일치한다는 것을 알 수있다 900 밀리 초 이제 사용할 수있는이 기능을 사용할 것입니다 SQL Server에서 오래 동안, 그러나 최신 버전에서는 개선되었습니다 CLUSTERED COLUMNSTORE INDEX를 작성 중입니다

분석적인 워크로드와 특정 쿼리에 필요한 시간과 공간이 줄어 듭니다 우리는 그것이 창조 된 것을 봅니다 시간을 측정해서 다시 같은 쿼리를 할 것입니다 900 밀리 초였습니다 지금은 17 세입니다

그리고 나는 그것을 반복해서 할 것입니다 7 밀리 초 보시다시피, SQL Server에는 매우 많은 기능이 있습니다 응용 프로그램 측면에서 사용할 수있는 응용 프로그램 더 많은 생산성을 얻으려고하는 개발자로서 당신은 데이터베이스에 대해 작업하고 있습니다 또한 서버 측에서 몇 가지 작업을 수행 할 수 있습니다

이 columnstore 인덱스처럼 당신은 성능면에서 놀라 울 수 있습니다 보안, 분석 등 그리고 우리는 슬라이드로 돌아 왔습니다 그리고 이제 우리는 우리의 응용 프로그램을 Linux의 SQL Server에 연결하고, 유일하게 누락 된 단계는 해당 애플리케이션을 배치하는 것입니다 그리고 환경, 회사 ​​및 회사에 따라, 구내 서버에 배포하기로 결정할 수 있습니다

SQL Server 또는 SQL 데이터웨어 하우스와 유사합니다 Docker 기반 컨테이너에 게시 할 수 있습니다 Kubernetes 또는 Swarm과 같은 인프라 또는 Window Azure Services를 사용하여 클라우드에 게시 할 수 있습니다 어쩌면 당신은 다른 클라우드 환경 설정이나 심지어 당신의 hoster를 가질 수도 있습니다

이 비디오가 당신이 할 수있는 일에 대한 좋은 개요 였기를 바랍니다 Linux의 SQL Server 및 필요한 모든 단계 설치, 관리, 연결 및 배포 할 수 있습니다 더 많은 정보가 필요하거나 우리가 가지고있는 샘플 코드를 찾고 싶다면 사용, akams/sqldev 찾아보기하십시오 거기에 모든 정보가 있습니다

이 비디오를 시청 해 주셔서 감사합니다 [음악]

Build SQL Server 2017 applications on Linux | T153

안녕하세요, 저는 속편 서버의 제품 관리자를 만나고 있습니다 Azure 데이터베이스

이 비디오의 팀은 파이썬으로 앱을 만드는 법을 배우게됩니다 Java Csharp Ruby는 Lenox에 설치된 SQL 서버를 사용하여 PHP를 실행합니다 또한 최신 크로스 플랫폼 도구 인 Operation Studio를 사용하여 결과를 확인할 수 있습니다 Windows Lennox의 속편 데이터베이스의 양은 Mako A **입니다 이제 우리의 연결 환경을 오늘날과 같이 보도록하겠습니다

우리는 등반 드라이버가 예리하게 예견하도록 지원합니다 자바 플러스 플러스 플러스 플러스 루이스 앙고, 제발 당신이 선택한에 오 esseph에서 Luck에 Jess 물린 알아요 그리고 이것은 Mako를 포함 ** 레녹스 창문입니다 우리는 항상이 풍경을 펼치기를 원합니다 사용하는 언어가 있고 슬라이드에 없으면 전자 메일로 알려주고이 드라이버가 많은 지루하고 지루할지라도 이야기 할 수 있습니다 고도로 작은 지루한 Goanna 속편을 참조하십시오

Deby는 지역 사회 주도 프로젝트입니다 우리는 지역 사회와 긴밀히 협력하여이 프로젝트 특별 탱크에 기여하고 저자에게 언급했습니다 Michael Klee Hammer Arthur Scriber, Dennis and can은 자신의 작업을위한 열입니다 음, 서로 다른 클라이언트 드라이버를 두 번 클릭하십시오 우리는 이러한 모든 드라이버가 각 언어의 패키지 관리자에서 지원되는지 확인해야합니다

예를 들어 우리의 자바 드라이버는 현재 오픈 소스로 제공됩니다 우리의 PHP 드라이버조차도 Pakal의 Jess 지루한 드라이버가 enpi에서 사용할 수있는 오픈 소스입니다 이동 중에 사용할 수있는 목표 드라이버는 python 드라이버를 얻습니다 Anna Ruby 드라이버와 잼은 터미널을 열고 패키지 관리자와 함께 좋아하는 언어를 선택할 수 있도록하기 만하면됩니다 우리는 종종 고객의 의견을 듣고 자주 묻습니다

이것은 멋지다 그러나 어떻게 시작할 수 있습니까? 낮고 끝에서 끝까지 과정을 통해 우리를 걷는 무언가가 있습니까? 우리는 시작 안내서를 만들었습니다 원하는 서부 언어로 선택한 언어로 다시 시작합니다 이 시작 안내서와 연습을 통해이 프로세스의 모습을 살펴 보겠습니다 좋아, 이거 시작 가이드 야

음 자바 개발자 나 레녹스에서 애플릿 속편 서버를 만들고 싶습니다 우리는 정말로이 웹 사이트에 다시 혼돈의 혼란을 가져 가야합니다 그러나 Java는 5 가지 옵션을 제공 할 것이고 바다로 물어볼 것입니다 너 내 사건에있어

우분투에서 SQL 서버를 사용하고 싶습니다 그래서 나는 앞으로 나아갈 것이며 보탬이 될 것입니다 일단 그렇게하면 3 단계 자습서가됩니다 첫 번째 환경은 환경 설정을 통해 진행됩니다 이것은 속편 서버 인 Java 드라이버를 설치한다는 것을 의미합니다

도구는 두 번째 단계는 실제로 속편 서버를 연결하는 응용 프로그램의 Java 응용 프로그램 종류를 생성 쿼리를 실행합니다 여기에서 Java를보다 빠르게 만드는 방법은 열이라고하는 영웅 기능 중 하나를 살펴 보겠습니다 Tauran은 이들을 만드는 방법을 안내합니다 Java를 사용하고 쿼리 성능을 최대 200 데크까지 최적화하는 방법을 설명하므로 여기에있는 자습서를 살펴 보겠습니다 첫 번째 단계는 속편 서버 설치입니다

이것은 매우 간단합니다 긍정의 토리 (Tories) 무정부 상태를 등록하는 방법을 통해 걷는 것의 종류 apt는 일단 서버를 설치하면 엉망진창을 설치하십시오 당신은 엉망 동등한 conf를 사용하여 그것을 설정할 수 없습니다 그런 다음 Java를 설치해야합니다

Java 설치를 마쳤 으면 Java 응용 프로그램을 실행하는 데 필요한 Zeedijk, A를 설치했습니다 그런 다음 Maven을 설치합니다 설치 관리자가 1, – 3을 실행하지 않고 설치 프로그램을 확인하십시오이 시점에서 후속 작업을 통해 첫 번째 작업 응용 프로그램을 만드는 데 필요한 모든 도구와 후속 서버가 준비되어 있습니다 2 단계 이상으로 궁금한 점이 있다면 첫 번째 직업을 창출하는 방법을 알려줄 것입니다

Maven을 사용하는 Bob 당신이 정말로해야 할 일은 복사 기반 명령을 터미널에서 붙여서 실행시키는 것입니다 일단 XML 파일을 편집해야합니다 Ponder XML 파일은이 경우에 사용할 라이브러리 참조를 넣을 수있는 파일입니다 우리는 jdbc 드라이버를 사용하여 방금 blurb를 복사하고 여기에 넣을 계획입니다

이 경우 622를 사용합니다 그것은 버전이고 이것은 전적으로 당신에게 달려 있습니다 최신 버전이 아닌 버전을 제어 할 수 있습니다

당신은 나가서 그것을 업데이트하고 당신이 갈 수있는 재건을 할 수 있습니다 일단 그렇게하면 파일을 저장하고 자바 코드를 작성하기 시작합니다 스크립트가하는 일은 우리가 localhost에 연결하려고하는 경우 연결 URL을 제공하는 매우 단순한 스크립트입니다 그는 일종의 연결된 인쇄물이 아니므로 연결할 수 있다면 연결 잡을 수있을 것입니다 연결되어 있지 않으면 인쇄 할 것입니다

오류 추적을 인쇄하십시오 그렇다면 그는 심지어 프로젝트를 만들고 항아리 패키지를 만들고 나면 그것을 실행할 것입니다 너는 달릴 수있어 정확히 Maven은 모든 작업 계획을 랩핑하여 실행합니다 Sequel Server를 연결하고 그렇게하십시오

이것은 매우 간단합니다 우리는별로 도움이되지 않았고 아마 나에게 묻을 것이다 실제로 일부 쿼리를 작성하려면 어떻게 데이터를 삽입합니까? 이렇게, 그렇게 매우 간단합니다 그게 내가 너에게 보여줄거야 이것이 우리가 군중의 모범이라고 부르는 것입니다

우리가 속편 서버를 연결할 때 우리가 군중에서 무엇을하는지, 우리는이 경우에는 데이터베이스를 만듭니다 그런 다음 내부 테이블과 스키마를 작성하여 일부 레코드를 삽입했습니다 레코드를 업데이트하십시오 다른 레코드를 삭제 한 다음 최종 결과 집합을 읽은 다음 컴퓨터에서이 레코드를 실행하는지 확인해보십시오 이 코드 샘플을 복사하기 만하면됩니다

항아리를 만들기 위해 다시 포장하십시오 그리고 일단 당신이 그걸로 끝나면 정확히 나를 실행하고 무슨 일이 있었는지, 그리고 무엇이 모든 것이 계획대로가는 지 알려줄 것입니다 이것은 결과입니다 이것은 당신이 볼 수있는 결과입니다 이 시점에서 나와 함께 SQL 서버 응용 프로그램 인 첫 번째 Java를 만들었을 것입니다

또한이 튜토리얼에서는 최대 절전 모드라는 가장 유명한 Java 프레임 워크 중 하나를 다시 사용하는 방법을 설명합니다 이 모든 것은 밀접하게 조수가되어 있으므로 복사하여 붙여 넣기 만하면 특별한 작업을 수행 할 필요가 없습니다 이 명령들과 나는 단지 당신을 위해 일할 것입니다 바로 박쥐에서 그래서 저는 그것을 매우 빠르게 스크롤 할 것입니다

최대 절전 모드를 지정하는 XML 파일을 가지고 있습니까? 의존성은 어느 것입니까? 코드 샘플이 있습니다 일단 실행을 완료하면 사용자 객체를 만듭니다 Maven 꾸러미가 그것을 만든 다음, 당신이 위에서 보았던 것과 정확히 같은 군중 샘플을 만든다 그러나 SQL 쿼리 대신 프레임 워크를 사용합니다 그것은 프레임 워크와 간단한 직업 응용 프로그램이었습니다

다음 질문에 우리는 종종 이것이 시원하다고 들었습니다 하지만 SQL Server 기능을 사용하여 어떻게 우리가 종종 열 저장소에 대해 이야기하는 유명한 기능 중 하나입니까? 또한 Java 응용 프로그램과 함께 열 저장소 색인을 사용할 수 있습니다 그리고이 예제에서 우리는 500,000 개의 행이있는 응용 프로그램이 실행되도록 이러한 인덱스를 만들 것입니다 100 전보다 빨라 졌기 때문에 우리는 전후에 어떤 종류의 일을 할 수 있습니다

그리고 그 모습을보고 싶다면 매우 간단합니다 당신은 패밀리를 삽입하고 백만 개의 행이있는 테이블이라고 불리는 테이블에 올랐습니다 그리고 그렇게하면 컬럼 스토어 인덱스없이 쿼리를 실행할 수 있습니다 시간을 측정 한 다음 테이블에 클러스터 된 열 저장소 인덱스를 만든 다음 동일한 쿼리를 실행합니다 그리고 시간을 측정하십시오

Maven 패키지를 실행 한 후 무엇을 알아 차리시겠습니까? 내 컴퓨터에서는 제 경우에 최대 5200 개까지 빠를 수 있습니다 나는 전례가 70 개나있다 그래서 이것은 자바가 실제로 여러분을 위해 실시간 데모를하고 싶고 우리의 풍경에 새로 추가 된 목표 중 하나 인 목표 라인을 사용할 것입니다 우리는 모든 플랫폼에서 다시 좋은 드라이버를 사용할 수 있습니다 그래서 우분투 머신으로 빨리 뛰어들겠습니다

그렇게 해봅시다 계속해서 로그인하십시오 좋아요, 그래서 저는 우분투 1604 머신에서 다음에 할 일을하고 있습니다 그리고 후속 서버를 설치할 것입니다 암호를 입력하면 내가 할 것인지 묻습니다

나는 '예'라고 말했다 그것은 속편 서버 패키지를 풀고있다 이것은 윈도우에서 설치 경험이 있었을 때 큰 발전이었습니다 당신이 볼 수 있듯이, 우리는 속편을 설치하고 몇 초 안에 Lennox의 기본 패키지 관리자 인 get을 사용합니다 앞으로 갈 Server Sequel Server를 설치해야합니다

다음으로 진행해 보도록하겠습니다 후속 서버 설정 관리자 인 Column Sequel Conf를 사용하겠습니다 그것은 내가 당신에게 패스워드를 물을 것 중 하나를 고를 것입니다 이것은 귀하의 에세이 비밀 번호입니다 그리고 암호를 입력하면 속편 서버와 빙고를 구성하는 데 몇 초가 걸릴 것입니다

설치가 완료되면 후속 서버가 시작됩니다 이 시점에서 우리는 갈 준비가되어 있습니다 우리의 최신 도구에 뛰어 들어갈 것입니다 후속 작업 스튜디오와 우리 데이터베이스를 설정, 그래서 우리는 응용 프로그램을 바로 갈 수 있습니다 무엇보다도 먼저 연결하겠습니다

그리고 그것은 나에게 프롬프트를주고, 내가 로컬 호스트에 연결하고 있다고 가정 해 봅시다 근본적으로 좋은 것을 가까이서 연결하는 것이 확실하지 않으므로 Sample Deby라는 데이터베이스를 만들어 보겠습니다 어서 가서 사용 해? 스키마를 만들고 스키마 테스트 스키마를 호출 할 것이다 다음으로 employees라는 테이블을 만듭니다 방금 3 개의 필드가 있습니다

그것은 ide 이름과 위치를 얻었습니다 일단 그렇게하면 3 개의 행이 삽입됩니다 호주에 사는 Jared 그들은 인도의 장로들을 지키며, Tom은 독일에 안정감을 가지고 살고 있습니다 계속해서이란에 줄 계획을 세우고 모든 것이 계획대로 이루어 지도록하십시오

선택한 쿼리를 실행하고 거기에서 바로 확인해 보겠습니다 최신 도구 인 후속 작업 스튜디오를 사용했습니다 내 우분투 컴퓨터에서 속편에 대한 몇 가지 쿼리를 통해 Lenox에서 실행되는 서버 또한 결과가 바로 앞에서 우리가 준비하고 처음으로 올라갈 준비가 된 시점입니다 이렇게하려면 첫 번째 단계는 속편을 얻는 것이고, 서버는 드라이버를 사용합니다

이렇게하려면 패키지 관리자 go go를 사용하십시오 보시다시피 몇 초를 보냅니다 그게 효과가 우리가 가서 그것을주고 설치합니다 이 시점에서 완벽하므로 속편 서버를 연결할 수있는 목표 드라이버를 설치했습니다 이제 Java에서 보았던 군중 작업을 실제로 수행하는 코드 샘플로 이동해 보겠습니다

이것은 매우 간단한 간단한 예입니다 기본적으로 연결 문자열을 변경합니다 일단 그렇게하면,이 예제에서 많은 쿼리를 실행합니다 우리는 연결 풀을 생성 할 것이고, 그것은 성능 향상에 도움이 될 것입니다 직원을 작성하십시오

우리는 테이블에서 직원 읽기 직원 고용 기능을 사용합니다 항목을 업데이트하십시오이 경우 Jake 항목이 삭제됩니다 그리고 준비가 되었다면 모든 결과를 읽으십시오 그냥 가보자

이 예제는 실제로 실행해야하는 모든 것을 실행하는 것입니다 군중들이가 내 로그인이 실패한 것 같아서 무슨 일이 일어나는지 보자 나는 파일을 저장하지 않았다 계속해서 연결을 말하면서 한 번 더 실행하면됩니다

새 레코드를 삽입하여 레코드가 모두 삽입되었는지 확인한 다음 레코드 중 하나를 업데이트 한 다음 몇 분 이내에 하나를 삭제 했으므로 후속 서버를 설치했습니다 최신 GUI 도구를 사용하여 동등한 작업을 수행하는 스튜디오에서 설치하십시오 운전사는 매우 간단한 스크립트를 작성했습니다이 스크립트는 연결되어 많은 군중 작업을 수행합니까? 다른 언어에 대해이 작업을 수행하려는 경우 나는 당신이 csharp에 대해 똑같이 할 수 있다는 것을 알 수 있기 때문에 우리의 웹 사이트로 다시 뛰어 넘는 것을 강력히 추천한다 PHP가 루비에 물린 것처럼, 물론 보았던 것처럼 가라

이 웹 사이트는 우리가 만든 기계 학습 서비스 중 하나 인 다른 사이트의 플러그도 가지고 있습니다 파이썬을 사용하여 예측 모델을 만들거나 튜토리얼을 가지고 싶다면 예를 들어 체크 아웃하는 것이 좋습니다 그리고 당신이 질문이 있으면이 모든 일을 겪으면서 채팅방에서 핑 (ping)을하십시오 우리는 대화방을 가지고 있고 꽤 활동적입니다

활동이 많아서 매일 모니터링하고 있으므로 메시지를 쏠 수 있으면 최대한 빨리 알려 드리겠습니다 너를 지켜봐 줘서 고마워 여러분이이 튜토리얼을보고 싶다면 문화 행동 시작 링크는 일명 나를 가리 킵니다 Slash Sequel Deaf 이제는 Lennox에서도 Server 2017을 사용할 수 있습니다

또한 설치하고 설치하면 채널 9에 더 많은 비디오를 연결할 수 있습니다 링크는 슬라이드에 있으며 Microsoft 가상 아카데미에서 더 많은 교육 비디오를 계속 시청할 수 있습니다 너희들이 내게 다가 가야한다면 언제든지 microsoftcom에 나에게 이메일을 보내주십시오

고기가 버그 데이브 (Dave)와 내 기타 사용자 이름을 강조합니까? 끔찍한 하이픈 버그 데이브인가요? 제가 방금 여러분에게 보여 줬던 많은 샘플들이 제 탭에 있어야합니다 너무나 많은 사람들

Cloudify LAMP! (Drupal and WordPress on GKE+CloudSQL) (Cloud Next ’18)

[음악 재생] 페르난도 산체스 : 안녕, 안녕하십니까 여기에 우리와 함께 해 주셔서 감사드립니다

내 이름은 페르난도 산체스 야 나는 뉴욕시의 Google Cloud 고객 기술자입니다 그리고 여기 나와 함께 Sebastian Weigand입니다 세바스찬, 너 자신을 소개하고 싶니? SEBASTIAN WEIGAND : 안녕하세요 그렇습니다

페르난도가 언급 한 것처럼, 우리는 모두 Google NYC의 고객 엔지니어입니다 그리고 우리는 LAMP의 경이로움에 대해서 이야기하려고 왔습니다 그리고 현대화 페르난도 산체스 : 그래서 우리의 대화는 "Cloudify LAMP!"라고합니다 손의 속담을 보여줍니다

생산 현장에서 LAMP 기반 사이트를 운영하고 있습니까? SEBASTIAN WEIGAND : 만세! 페르난도 산체스 : 좋습니다 램프가 무엇인지 알 수 있습니다 정말 끝내주는 군 누가 생산에서 Kubernetes를 운영하고 있습니까? 적은 사람들 SEBASTIAN WEIGAND : 조금 적은 사람들

페르난도 산체스 : 어려운 일 – 누가 프로덕션에서 쿠 베넷에 램프를 돌리고 있니? 괜찮아 좋은 우리 모두 오늘 당신에게 무언가가 있기를 바랍니다 네 SEBASTIAN WEIGAND : 그래서, 우리가 말했듯이, 이 이야기는 클라우드 내부의 램프 작동에 관한 것입니다

따라서 IT를 현대화하는 것이 전부입니다 그래서 모든 다른 도전에 대해 생각한다면 우리가 과거에 보았던 측면에서 생산에서 무언가를 운영하는 것, 당신이 역사에 어디에 있는지에 따라, 당신은 그 문제에 대한 다른 해결책을 가지고 있습니다 근대화 이야기라면, 제 시간에 돌아갈 수있는 방법, 대화의 종류를 알아 봅시다 무슨 일이 일어나고 있는지 알아 내려고 오늘 우리가 할 수있는 일 조금 더 쉽게 할 수 있습니다 그래서 목적을 위해서 – 우리는 거기에 갈

이 프리젠 테이션의 목적을 위해, 내 동료 페르난도가 가고있다 Vandelay Industries의 CTO 역할을 담당합니다 FERNANDO SANCHEZ : CTO 모자를 쓰고 있습니다 SEBASTIAN WEIGAND : 그는 실제로 CTO 모자를 가지고 있습니다 그래서 이것은 맞춤 주문되었습니다

나는 devops 엔지니어가 될거야 나는 devops 엔지니어 때문에 모자를하지 않습니다 토템 기둥에서 매우 낮습니다 그래서 Vandelay Industries는 – 전에 들었던 사람, 그냥 호기심? 아, 저기에 몇 명이있어 우리가 가진 농담에 웃으면 서 말야

하지만, 네, 그들은 수입, 수출, 및 아키텍처 그들은 90 년대에 매우 두드러졌습니다 결과적으로 우리는 제 시간에 돌아갈 것입니다 그런 종류의 것을 살펴보십시오 하지만 Google Cloud 덕분에 요즘에는 매우 현대적인 초 고성능을 IT 스택은 LAMP에 집중되어 있습니다

전에 말했듯이 이것이 근대화에 관한 것이라면, 우리는 현대 IT 스택에 관해서 이야기 할 수 없다 우리가 어디서 왔는지 얘기하지 않고 이제 페르난도 (Fernando)가 CTO의 역할을 수행하게되었습니다 나는 devops 사람의 역할을 맡을거야, 우리는 제 시간에 돌아갈거야 나는 우리가 그 경이로운 음악을 가지고 있었으면 좋겠다

하지만 프레젠테이션에 오디오를 넣고 싶지는 않았습니다 일을 더 간단하게 유지하는 것 그래서 90 년대 후반입니다 이것을 머리 속에 그려보세요 소수의 다른 웹 사이트가 있습니다

맞습니까? 웹이 당시와 똑같은 모습이었습니다 저기 왼쪽 상단을 인식 할 수 있습니다 그것은 베타 버전입니다 우리는 많은 다른 조각들에 베타 태그를 두는 것을 좋아합니다 소프트웨어의

이 특정 시대에 웹 사이트 기업이 시작한 이래로 디지털 존재가 많은 의미를 가졌다는 것을 깨닫게되었습니다 당신은 전적으로 사업이 될 수 없습니다 온라인상의 무의미한 벽돌과 박격포 공간에서 고객을 리디렉션하거나 그렇게 할 수 있습니다 전자 상거래라는 용어는 인기를 얻고 있습니다 몇 가지 다른 웹 사이트가 있습니다

당신이 물건을 사러 갈 수 있다는 것, 또는 재고 목록을 살펴보고, 어쩌면 일을 설정하고, 일과 기타 등을 계획 할 수도 있습니다 물론, 다른 웹 사이트가 있습니다 당신의 개, 또는 가족을 위해 당신의 자신의 웹 사이트를 만들거나, 또는 기타 등등 그러나이 시점에서 큰 추세 모두가 디지털로 존재해야합니다 페르난도 산체스 : 물론

SEBASTIAN WEIGAND : 모두가 생각하고 있습니다 "나는 디지털 존재감이 있어야한다 나는 디지털 존재감이 있어야한다 " 그리고 누가 우리가 Vandelay Industries에 디지털 방식으로 존재해야만 했나요? 페르난도 산체스 : CTO SEBASTIAN WEIGAND : 우리의 훌륭한 CTO

FERNANDO SANCHEZ : 디지털이 필요합니다 우리는 인터넷에 있어야합니다 모두 인터넷에있어 이 인터넷 물건이 벗고있는 것 같습니다 그래서 나는 Vandelay가 인터넷에 있어야한다고 생각합니다

우리는이 웹 문제에 착수하여 디지털 존재 엔지니어링 팀, 어때요? 내가이 웹 물건에 들어갈 수 있도록? SEBASTIAN WEIGAND : 좋은 질문입니다 이것은 새로운 종류의 상황이지만 웹 물건, 웹 사물, 웹 것 좋아,이 웹은 어떻게 생겼지? 글쎄, 내가이 웹 물건을 갖게된다면, 나는 어떤 종류의 서버가 필요할 것이다 이 거대한 상자 형 물건은 꽤 잘 작동 할 것입니다

시대의 전형입니다 나는 일종의 웹 서버 소프트웨어가 필요할 것이다 그래서 분명히 웹 서버가 있어야만한다면, 당신은 하드웨어가 있어야합니다 모든 것을 가진 소프트웨어가 있어야합니다 또한 HTML 파일을 만들어야합니다

그것은 우리가 의미하는 바를 의미합니다 정적 HTML 코드를 코드로 이동하여 작동하도록하겠습니다 물론 애니메이션 GIF가 필요합니다 90 년대 후반이기 때문에 살아 움직이는듯한 GIF가없는 사람은 엉덩이가 멋지지 않습니다 페르난도 산체스 : 열쇠입니다

그것이 바로 열쇠입니다 애니메이션 GIF가 필요합니다 SEBASTIAN WEIGAND : 나는 우리가 몇 가지 애니메이션 GIF가 있는데 특히 이야기하기 공사중에 관한 것 페르난도 산체스 : 그것에 가자 SEBASTIAN WEIGAND : 그래서 나는 조금 생각했습니다

그리고 이것은 현대의 웹 스택이 나에게 닮은 것입니다 그래서 우리는 큰 유닉스 박스를 어딘가에 가지고 있습니다 우리는 Apache라고 불리는 것을 가지고 있습니다 이것은 새로운 것입니다 그것은 오픈 소스지만

네가 좋아할 것 같아 그리고 우리는 그 모든 정적 파일들을 가지고 있습니다 내가 전에 언급 한 그것들은 수십 가지 복잡한 코드가 아닙니다 그리고 우리는 이것을 가동시킬 수 있습니다

페르난도 산체스 : 좋아, 가자 SEBASTIAN WEIGAND : 그거 좋은데? 페르난도 산체스 : 그것에 가자 SEBASTIAN WEIGAND : 좋습니다 그래서 서버를 만들었습니다 나는 이것을 배치했다

모든 것이 환상적입니다 페르난도 산체스 : 좋습니다, 그래서 우리는 가져 오기, 내보내기 및 아키텍처 용 빌드 페이지를 작성합니다

SEBASTIAN WEIGAND : 네, 3 개의 웹 사이트, 아주 쉽습니다 – 가져 오기, 수출, 건축 FERNANDO SANCHEZ : 그게 우리가 필요한 전부입니다 SEBASTIAN WEIGAND : 그게 우리가 필요한 전부입니다 페르난도 산체스 : 왜냐하면, 웹 것, 우리가 떠날 지 알 수 있습니다 SEBASTIAN WEIGAND : 그래,이 웹 것 아마 어쨌든 위상 일 겁니다

그것에 대해 걱정하지 마십시오 페르난도 산체스 : 예, 예, 보겠습니다 우리가 뭔가를 만들 거라고 생각해 그래, 좋아 시간은 계속된다

SEBASTIAN WEIGAND : 이제는 2000 년대 초반입니다 우리가 여기서 가장 중요한 것은 웹입니다 이것이 성공할 것이라는 것을 누가 알았습니까? 당신은 많은 수의 회사가 있습니다 이 새로운 디지털 플랫폼을 채택하고 있으며, 디지털 존재감 확립, 디지털 브랜드 구축 등이 포함됩니다 내 말은 미친 소리 야

우리가 설정 한 웹 사이트가 점점 커지고 있습니다 상당한 양의 트래픽 실제로 사람들은 수입에 정말로 관심이 있습니다 수출 및 건축 FERNANDO SANCHEZ : 누가 맞힐까요? 인터넷에서? SEBASTIAN WEIGAND : 그리고 결과적으로, 우리는이 일을 계속 지키고 싶다

실행하고 그 일을 정적 HTML 파일을 부지런히 업데이트했습니다 다양한 편집자에게 손으로 그리고 새로운 페이지를 요청할 때마다, 이제 우리는 하나 이상의 가져 오기 페이지와 하나 이상의 내보내기 페이지가 있어야합니다 그리고 하나 이상의 아키텍처 페이지 – FERNANDO SANCHEZ : 아키텍처 페이지를 좋아합니다 SEBASTIAN WEIGAND : 당신은 아키텍처 페이지를 좋아합니다

하지만 많은 것들이있어서 이 일을 시작하고 실행하기 위해 노력해야합니다 그러나 당신도 알다시피, 그들은 변화하고 있습니다 페르난도 산체스 : 그래, 많은 것들 지금 인터넷에서 일어나고 있습니다 SEBASTIAN WEIGAND : 물론 이죠 이것이 우리 마음에있는 것입니다

이제 우리는 휴대폰을 가지고 있습니다 그들은 조금 더 유비쿼터스 화되고 있습니다 우리는 판매되고 또한 다운로드되는 디지털 콘텐츠를 보유하고 있으며, 잠재적으로 불법적으로 우리는 또한 인터넷이 주요 요인이되고 있습니다 기업의 성공에 더 이상 비즈니스가 일종의 디지털 존재없이 존재합니다 비즈니스가 존재해야하며 상당한 금액의 수익이 있어야합니다

실제로 디지털 존재의 일종을 가지고 온다 사람들이 가서 물건을 살 수 있도록 온라인으로 및 서비스 등을 포함한다 페르난도 산체스 : 그래서 Vandelay의 웹은 훌륭하게 작동합니다 트래픽이 많이 발생하고 있습니다 우리는 인터넷에서 많은 사업을하고 있습니다

그러나 분명히 시간이 흐르고 나는 너희들이 어려움을 겪고있는 것처럼 느껴져 엔지니어링 측면 SEBASTIAN WEIGAND : 솔직히 말해서, 우리는 실제로 몇 가지 어려움을 겪고 있습니다 우리가 달리고있는 것들 중 하나 그 하나의 서버는 훌륭하게 작동합니다 나는 절대적으로 환경과 이것 저것을 좋아한다

거기에 – 그것은 그것이 내가 머물러 있기를 바랄만큼 위로 머물러 있지 않습니다 때로는 충돌이 발생하고 문제를 해결해야합니다 또한 휴식을 취하는 가끔 부분을 교체해야합니다 그것의 꼭대기에, 나는 확실하게해야한다 전달하려는 콘텐츠가 코딩되고 배송 됨 그리고 다른 사람들의 무리에게 보냈습니다

그래서 그게, 조금 어렵습니다 FERNANDO SANCHEZ : 더 많은 기능이 필요하다고 생각합니다 모든 HTML 파일을 편집해야한다고 생각합니다 손으로, 저것은 – 너와 너 팀 – 그건별로 실용적이지 않습니다 따라서 콘텐츠를 동적으로 변경해야한다고 생각합니다

웹 사이트가 있도록 시스템이 필요합니다 구조는 거기에있다 그러나 우리는 단지 콘텐츠를 추가하고 콘텐츠를 제거합니다 HTML 파일을 편집 할 필요가 없습니다 그리고 다른 하나는 멋진 상자입니다

그대로, 나는이 구글 친구들이 상용 서버를 사용하는 것과 매우 흡사합니다 SEBASTIAN WEIGAND : 나는 그것을 들었다 페르난도 산체스 : 아마도 우리는 범용 서버를 사용해야합니다 그리고 저는 가상 서버에 대해서도 마찬가지입니다 SEBASTIAN WEIGAND : – 서버

페르난도 산체스 : 분명히 당신은 할 수 있습니다 서버 내부에 서버를 생성하십시오 그리고 그것들을 복사하여 주위로 옮길 수 있습니다 그런 다음 하드웨어를 더 잘 사용할 수 있습니다 내 CTO 비전에서 생각하기에, 콘텐츠 관리 시스템을 구현해야합니다

그리고 가상화해야합니다 엔지니어링 팀 – SEBASTIAN WEIGAND : 네, 선생님? 페르난도 산체스 : 어떻게 도와 주실 수 있습니까? SEBASTIAN WEIGAND : OK, 컨텐트 관리 시스템, 가상화해야합니다 괜찮아 어떻게하는지 알아 보겠습니다 그렇다면 현대 IT 스택은 어떻게 생겼을까요? 내가 구축해야하는이 CMS는 무엇입니까? 그럼 아직 웹 사이트이므로 여전히 웹 서버가 필요합니다

나는 여전히 데이터베이스가 필요할 것이다 나는 약간의 CMS 소프트웨어를 생각해 내야 할 것이다 하지만 이제 저는 두 사람을 고용해야합니다 이봐, 우리는 아주 성공적이었다 창업자 인 Art Vandelay는 절대적으로 중요했습니다

높은 구경의 사람들을 끌어들이는 데 우리가 우리 조직에 갖고 싶어하는 것 결과적으로, 몇 명의 작전 단원을 고용해야합니다 왜냐하면 지금 나는 다른 VM들을 가지고 있기 때문이다 예를 들어 데이터베이스 VM과 같이 관리해야하는 그리고 웹 서버 VM 및 기타 등등을 관리해야합니다 또한 나는 dev 사람들이 필요할 것이다

페르난도 산체스 : 네 SEBASTIAN WEIGAND : 이제 우리는 사용중인 응용 프로그램 사용 나를 위해 이러한 모든 동적 웹 사이트를 관리하려고합니다 그래서 저는 그 사람들과 VM을 고용해야 할 것입니다 FERNANDO SANCHEZ : VM은 무엇입니까? SEBASTIAN WEIGAND : 가상 머신 페르난도 산체스 : 오, 알았어

SEBASTIAN WEIGAND : 나는 확실히해야 할 것이다 우리가 실제로 관리 할 수있는 무언가를 얻었습니다 그걸 멋지게 감쌌다 이게 내 머리 속에서 어떻게 생겼어? 약간의 생각이 들었습니다 이것이 내가 생각해내는 것입니다

그래서– FERNANDO SANCHEZ : 좋아, 네가 가진 걸 보자 SEBASTIAN WEIGAND : 그래서, 현대의 웹 스택 – 음, 2000 년대에 – 램프가 생겼어 그런데, 리눅스, 아파치, MySQL, PHP 페르난도 산체스 : 그것은 그것이 무엇을 의미합니까! SEBASTIAN WEIGAND : 그것이 바로 그 의미입니다 그것은 지니 생각이 아닙니다

그것은 단지 두문자어입니다 유닉스가 리눅스가되기 때문에 우리는 유닉스 대신 리눅스를 가지고있다 Linux는 새로운 인기입니다 또한 저렴합니다 그것은 무료입니다

그리고 그것은 잘 작동합니다 페르난도 산체스 : 나는 그것을 좋아한다 SEBASTIAN WEIGAND : 당신이 좋아할 것 같아요 나는 돈을 저축하고있다 아파치는 여전히 실제 운영되고 있으며, 아파치가 엄청난 양의 일을하기 때문이다

그들은 새로운 기능을 계속해서 구현하고 있습니다 그것들은 당신이 얻을 수있는 사실상의 웹 서버 소프트웨어입니다 또한, MySQL, 무료 데이터베이스 – 니가 그걸 좋아할 거라 생각 했어 페르난도 산체스 : 무료 맥주와 같이 무료 또는 무료로 무료로 제공됩니다 연설? SEBASTIAN WEIGAND : 둘다 실제로, 꽤 멋지 네요

그들은 지원 서비스를 가지고 있지만, 우리가 추가 지원이 필요하면 우리는 그들을 연결할 수 있습니다 그리고 이것 저것 그리고 PHP는이 비밀 소스 프로그래밍 언어입니다 그런 종류의 모든 것을 하나로 묶어서 당신을위한 동적 인 웹 사이트 오 그런데, 우리는 2를 얻었고, count 그들, 그것을하는 두 가지 다른 방법

Drupal과 WordPress가 있습니다 그래서 우리는 그들 중 하나를 선택할 수 있습니다 그것들은 실제로 이러한 것들과 우리가 상호 작용할 수있는 것들을 생성합니다 그리고 나서 여기가 당신의 VM을 할 것입니다 KVM 또는 Xen

나는 약간의 연구를해야한다 어떤 것이 우리의 필요에 더 잘 맞는지 알아 내려고하지만, 페르난도 산체스 : KVM 또는 젠 – 여기처럼 – 다른게 없었어 VM웨어 같은 것을 했나요? SEBASTIAN WEIGAND : 오, 그래, 잘있어 이 미친 여자, 다이앤 그린이나 뭐든간에 그녀는이 회사를 시작하고 있지만 듣고 있습니다

그들은 비싼 것 같아요 그래서 나는 일을 좋고 자유롭고 오픈 소스로 유지할 것입니다 이것이 바로 현대 웹 스택의 모습입니다 페르난도 산체스 : 좋아, 너희들이 이것들을 선택하고있어 너희들이 이것들을 고르고있다

그리고 다른 사람들이 선택한 것은 무엇입니까? 아주 독창적입니까, 아니면 SEBASTIAN WEIGAND : 물론 이죠 사실, 잠깐 만요

여기에 몇 가지 통계를 해봅시다 나는 밖으로 나갔다, 나는 약간 통계를 움켜 잡았다 이것 좀보세요 이것은 인터넷에서 돌아 다니는 모든 웹 사이트입니다 이 거대한 덩어리를보세요

페르난도 산체스 : 인터넷의 1/3이 램프를 가동 중입니다 SEBASTIAN WEIGAND : 예, 인터넷의 3 분의 1 실제로 램프에 있습니다 실제로 사용하는 사람들의 2/3 WordPress, Joomla 또는 Drupal 중 하나를 선택했습니다 그것은 제가 전에 언급 한 두 가지를 의미합니다 우리가 그들을 사용한다면 안전한 내기

Fernando SANCHEZ : CMS의 경우, 세계에서 세 개의 CMS 중 하나는 WordPress 또는 Drupal입니다 SEBASTIAN WEIGAND : 물론 이죠 페르난도 산체스 : 너희들처럼 보인다 올바른 말을 내기 좋아, 나는 그것을 좋아한다

나는 그것을 좋아한다 그럼 가자 이것을 사용합시다 이것을 사용합시다 그리고 시간을두고 진행합시다

우리는 이런 것들을 사용하고 있습니다 SEBASTIAN WEIGAND : 이제 2010 년입니다 페르난도 산체스 : 2010입니다 그것은 구름입니다 그것은 구름입니다

SEBASTIAN WEIGAND : 우리의 마음에, 구름 페르난도 산체스 : 모든 곳의 구름 SEBASTIAN WEIGAND : 구름, 구름, 구름 – 나는 거리를 걸어 다닐 수 없으며 이메일을 열 수 없다 나를 끌어들이려는 사람들의 수없이 이 흥미로운 구름이 있습니다 나는 구름, 구름에 대해 듣지 않고 어느 곳으로도 갈 수 없다

클라우드, 흐림, 흐림, 클라우드 그래서 우리의 마음에, 그것은 구름입니다 FERNANDO SANCHEZ : 그러면이 가상화처럼 보입니다 우리가 가진 것은 일하고 있었지만 우리는 또한 – 너희들이 몇 가지 어려움을 겪고있는 걸 내가 안다 현재의 아키텍처와 맞습니까? 이것이 성장한 후에 Art Vandelay 우리의 진보와 함께 세 부분으로, 가져 오기, 내보내기, 및 아키텍처

SEBASTIAN WEIGAND : 그래, 절대적으로 페르난도 산체스 : 그는 정말로 흥분하고 있습니다 사업은 계속되고 있지만 사실, 우리는 우리 한계를 여기에서 치고 있지, 그렇지? SEBASTIAN WEIGAND : 나는 정직하다 우리에게는 엔지니어링에 몇 가지 어려움이 있습니다 우리가 가진 것들 중 하나는 로컬에서 MySQL을 돌리는 것입니다

그것은 확장되지 않습니다 들어가서 크기를 조정해야 해 VM이 아닙니다 실제로 추가 하드웨어를 구입해야합니다 디스크 백 로그가 있는지 확인해야합니다

데이터 센터에 도착했는지 확인할 수 있습니다 적절한 시간에 우리가 그들을 넣을 수 있는지 확인하십시오 서버에서 랙에 쌓아서 구성하고 가져옵니다 배포 및 모든 것 또한, 나는 ~해야한다

각 컴포넌트를 독립적으로 스케일링하고 싶습니다 VM 측에서 서로 다른 웹 티어와 크기가 다르므로, 서로 다른 VM들과 그 외의 것들은 있지만 기본 하드웨어 건축물 그래서 네트워크는 약간 달라져야합니다 웹 프론트 엔드가 데이터베이스와 대화해야하기 때문에 백엔드

그 파이프가 멋지고 뚱뚱하다는 것을 확인해야합니다 모든 것이 작동 할 수 있도록 또한 페이징되는 것을 좋아하지 않습니다 나는 오랫동안 회사에 있었고, 하지만 우리 창립자의 말을 받아 들인다면, 그는 주어진 시간에 너무 많이하고 싶지 않다고 이야기했습니다 그리고 나는 더 이상 전화하고 싶지 않습니다

또한 이러한 서버를 배포 및 운영하고 유지 관리하며, 사실, 할 일이 많이 남아 있습니다 내가해야 할 사람들을 고용해야 해 다른 것들의 무리 하지만 하드웨어를 유지해야합니다 나는 가상 동등 물을 유지해야한다

내 시간을 많이 먹고있는 하드웨어 때문일 수도 있습니다 페르난도 산체스 : 네, 그렇습니다 내가 참조 내가 참조 내가 참조

이 회사가하는 일에 집중하길 바래 우리는 하드웨어 회사가 아닙니다 우리는 수입, 수출, 및 아키텍처 그래서 저는 여러분들이 단지 우리 회사가하는 일이 무엇이든, 하드웨어가 아닌 조작 내가 본 다른 것은 우리는 매번 도전을 받고있다

우리는 점점 더 많은 수요를 얻습니다 그리고 내가 원하는 것은 그 일을위한 것입니다 위아래로 확장 할 수 있습니다 그리고 우리가 사용하고있는 것에 대해 지불하고 싶습니다 나는 우리가 사용하지 않는 것들에 대해 우리가 지불하고있는 것이 무엇인지 모른다

그래서 나는 일들을 확장 할 수 있기를 바랍니다 그리고 나는 당신이 경영에 집중하는 것을 좋아하지 않을 것입니다 인프라에 집중하고 싶지 않습니다 클라우드에 있어야한다고 생각합니다 구름, 우리는 구름, 구름, 구름에 있어야합니다

왜 우리는 구름 속에 있지 않습니까? 우리는 구름 속에 있어야합니다 나는 구름을 좋아한다 나는 심지어 구름이라는 단어를 좋아한다 구름 기술 장교 SEBASTIAN WEIGAND : 아, 그래, C

와 함께 그래, 좋아 구름 좋아, 나 좀 가자 생각 좀해라

페르난도 산체스 : 좋아 SEBASTIAN WEIGAND : 구름 구름 구름 우리가 구름으로 이동할 예정이라면, 나는 구름이 물건들을 제공하기를 원할 것이다

나를 위해 승인? 이 구름이 무엇인지 생각하면, 그것이 무엇을 제공하는지 생각하면, 나는 그것을 비즈니스 요구와 짝 지워야한다 그래서 내가 무엇을 필요로 하는가는, 우선, 나는 클라우드 사용 방법을 파악해야합니다 일종의 명백한,하지만 어떻게 해야할지 알아낼 필요가있다 우리는 KVM 및 Xen을 통해 많은 전문 기술을 개발했습니다

그러나 그들은 GUI를 배우기 때문에 꽤 적용되지 않습니다 API와 다른 것들이 있습니다 페르난도 산체스 : 코드 녀석들이 대신 할거야, 그렇지? SEBASTIAN WEIGAND : 반드시 그런 것은 아니지만, 구체적인 인프라와 방법으로 그것은 구성되어 있습니다 버튼을 넣을 수 있다고 확신하지만 어렵습니다 그래서 저는이 용어가 "들어 올림과 교대"라고 들었습니다

심지어 운도 좋은 용어가되어야 해 결과적으로 애플리케이션을 마이그레이션해야합니다 우리는이 세 가지 큰 응용 프로그램을 가지고 있습니다 가져 오기 작업량, 내보내기 작업량, 및 아키텍처 워크로드

그래서 우리는 그것들을 클라우드로 가져 가고 싶습니다 페르난도 산체스 : 우리는 그 (것)들을 들게하고 그 구름 속에서 그들을 이동 시켜라 SEBASTIAN WEIGAND : 그래, 그들을 들어 올리고 그들을 옮긴다 FERNANDO SANCHEZ : 클라우드로 이동하십시오 나는 그것을 좋아한다

그래, 가자 SEBASTIAN WEIGAND : 잠깐 만요 클라우드 – 네이티브라는 것이 있습니다 나는 그것에 대해 계속 듣고있다 FERNANDO SANCHEZ : 저도 그렇습니다

SEBASTIAN WEIGAND : 클라우드에서 태어난 것은 뭔가? 그리고 그것을 활용하도록 설계되었습니다 그래서 그게 무엇인지 알아 내야합니다 그러나 그 동안에 – 페르난도 산체스 : 그것은 단지 리프트와 교대 일뿐입니다 거기 프레임 SEBASTIAN WEIGAND : 바로 들어 올리고 이동하십시오

FERNANDO SANCHEZ : 그리고 우리는 그것을 알아낼 것입니다 SEBASTIAN WEIGAND : 버튼을 넣으면 좋을 것 같습니다 FERNANDO SANCHEZ : 그게 전부입니다 움직여 보자 움직여 보자

그리고 나서 시간이지나갑니다 시간은지나갑니다 SEBASTIAN WEIGAND : 오늘의 선물입니다 FERNANDO SANCHEZ : 우리는 우리 물건을 들고 구름으로 옮겼습니다 그리고 그것은 클라우드에서 돌아가고 있으며 우리는 행복합니다

새벽 3시에 호출되지 않습니다 SEBASTIAN WEIGAND : 글쎄, 때때로 여기저기서, 그러나 대부분은 너무 나쁘지 않습니다 FERNANDO SANCHEZ : 그래도 우리는 여전히 VM을 클라우드에 보유하고 있습니까? SEBASTIAN WEIGAND : 음 – 흠 페르난도 산체스 : 우리는 여전히 클라우드의 가상 시스템에서 데이터베이스를 처리합니까? SEBASTIAN WEIGAND : 네 FERNANDO SANCHEZ : 그래서 우리는 똑같은 일을하고 있습니다

다른 사람들의 컴퓨터 에서요? SEBASTIAN WEIGAND : 당신이하는 말을 봅니다 예, 그렇지만 하드웨어에 대해 걱정할 필요가 없습니다 구성 요소 및 사물 페르난도 산체스 : 좋습니다 좋습니다

SEBASTIAN WEIGAND : 버튼 클릭에만 집중할 수 있습니다 수용력을 얻는다 그 사람에 대해 걱정할 필요가 없습니다 우리가 모든 하드웨어 관련 문제를 다루기 위해 고용 한 소지품 우린 그를 다시 태어 났고, 이제 그는 실제로 우리 devops 그룹에서 일하고

우리는 팀을 합병했습니다 페르난도 산체스 : 좋아 SEBASTIAN WEIGAND : 당신은 어떻게 생각하니? 멋지다, 응? 페르난도 산체스 : 나는 아직도 걱정하고있다 10 년 전에 클라우드 네이티브를 언급했기 때문입니다 그리고 난 잘 모르겠다

나는 그 말을 계속 듣는다 나는 사람들이 구름 속에서 생산된다는 이야기를 계속 들으며, 그러나 신축적인 방식으로, 주문형으로 그래서 지금은 걱정입니다 우리는 클라우드를 최대한 활용하고 있습니까? 우리는 최선의 방법으로 구름을 사용하고 있습니까? 엔지니어링 팀? SEBASTIAN WEIGAND : 솔직히 말해서, 아마도 반드시 그런 것은 아닙니다 페르난도 산체스 : 그럼 우리는 무엇을 조사 할 수 있습니까? SEBASTIAN WEIGAND : 내가 실제로 한 것에 다시 돌아가 보자

할 구름이 필요합니다 그러면이 구름이 실제로 무엇을 제공할까요? 그리고 실제로 그것을하기 위해 나는 무엇이 필요합니까? 이 투자에서 가장 큰 가치를 얻으려면 어떻게해야합니까? 글쎄, 내가 필요한 것은, 우리가 멋진 밴델 레이에서 필요한 것 산업 분야는 신뢰성, 확장 성, 자동화, 표준화 나는 그것을 올려 놓을 때 머물러 있어야한다 나는 그것이 내려 가지 않도록 배양 할 것이 필요하다 따라서, 머물러 있지 않습니다

우리가하지 않기 때문에 자동화해야합니다 소수의 사람들, 우리는 지금 많은 웹 페이지를 가지고 있습니다 그래서 저는 버튼을 누르고 뭔가 효과가 있기를 바랍니다 표준화 – 그래, 절대적으로 표준화가 필요하다 표준화가 필요한 이유는 하나의 프레임 워크, 하나의 인프라를 배웠다

그런 다음 변경되었습니다 우리는 다른 일로 갔다 우리는 모든 것을 다시해야했다 나는 다시는 그것을하고 싶지 않습니다 버튼을 누른 다음 작동 시키려고합니다

사실, 나는 작전을 원하지 않아 페르난도 산체스 : 뭐라구? 미안해, 뭐야? SEBASTIAN WEIGAND : 아무런 조작이 없습니다 페르난도 산체스 : 아, 그래 나는 그것을 좋아한다 SEBASTIAN WEIGAND : 얼마나 놀랍습니까? 내 말은, 내가 버튼을 누를 수있는 세상을 상상해 보라

컴퓨터가 스스로 작동합니다 페르난도 산체스 : 나는 그것을 좋아한다 그래서 너희들은에 초점을 맞출 것이다 운영 및 하드웨어 및 – 나는 그것을 좋아한다 나는 그것을 좋아한다

우리는 그렇게해야합니다 그렇다면 우리는 현대 IT 스택 어쩌면 오늘의 도구? SEBASTIAN WEIGAND : 네, 좋아, 그럼 약간의 생각이 들었다 그리고 나는 흥미롭고 재미있는 것을 생각해 냈다 당신이 좋아할 것 같아요

페르난도 산체스 : 좋아, 보자 SEBASTIAN WEIGAND : 내가 생각하기에 현대 IT 스택처럼 보일 것입니다 Kubernetes라고 불리는 것을 활용합시다 보다 나은 가상 네트워크를 활용 해 보겠습니다 더 나은 가상 스토리지

관리되는 보안, 모니터링 및 로깅 호스팅, 자동화 된 보트로드 등이 포함됩니다 여기에 문제가 있기 때문에 인프라의 전체 하위 섹션에 전원을 공급해야한다 나머지 인프라 관리 배포해야합니다 나는 단지 그것이 나를 위해 일하기를 바랄 뿐이다 그것은 꽤 멋지다

특히 당신이 Kubernetes를 고려할 때 우리를 위해 많은 일을합니다 재미있는 개념입니다 우리는 단지 일부 애플리케이션을 컨테이너 화해야합니다 여기저기서, 나는 우리가 잘되어야한다고 생각합니다 FERNANDO SANCHEZ : 좋습니다, 그래서 우리는 아이디어를 가지고 있습니다

나는 우리가 그것에 대해 연구해야한다고 생각한다 우리는 아마 우리의 램프 스택을 가져와이 모든 것들을 사용해야합니다 어떻게 보이는지 보아라 SEBASTIAN WEIGAND : 우리는 페르난도 산체스 : 좋아, 그럼 그 일을 해보 죠 그것에 대해 노력합시다

우리의 램프 솔루션 SEBASTIAN WEIGAND : 이제는 내 동료 페르난도 이 훌륭한 권위자의 CTO가되는 것을 멈추게 될 것입니다 Vandelay Industries와 대신에 Google 고객으로 자신의 역할을 재개하려고합니다 나 자신과 함께 엔지니어 그리고 우리는 실제 연결된 솔루션에 대해 이야기 할 것입니다

우리가 생각해내는 산업은 우리가 언급 한 모든 것들을 이용하기를 원한다 우리가 원하는 모든 필요 사항을 충족시키고 모든 이점을 얻으십시오 우리가 얘기했던 것 페르난도 산체스 : 좋아, 그래서 우리는 우리의 램프 응용 프로그램을 얻을 수 있습니다 그래서 그것은 동일하게 유지되어야합니다

Vandelay Industries를 위해 개발 된 많은 것들이 있습니다 우리가 Drupal 또는 WordPress에서 일 했든, 우리는 여전히 그것을하고 싶다 그러나 우리는 이것을 컨테이너에 담기를 원합니다 컨테이너에 넣고 싶습니다 그래서 우리는 그것을 변경할 필요가 없다

구성 할 필요가 없습니다 우리는 그것을 지킨다 SEBASTIAN WEIGAND : 네 FERNANDO SANCHEZ :하지만 우리는 컨테이너를 다루고 싶지 않습니다 우리는 VM 관리에서 관리에 이르기를 원하지 않습니다

컨테이너 관리 컨테이너를 사용할 수있는만큼 서비스, ​​우리를 위해 클러스터를 처리하는 사람, 잘 그게 좋을거야 LAMP의 또 다른 주요 부분은 데이터베이스입니다 그게 정보가있는 곳입니다 이것이 척추의 핵심 시스템입니다

작업 조각을 제거 할 수 있다면 우리가 가지 않고 좋은 잠을 잘 수 있다면 백업 작업, 유지 관리, 높은 가용성과 그러한 것들에서, 그것은 좋을 것입니다 이제 관리되는 MySQL 버전을 살펴 보겠습니다 램프가 가지고있는 다른 것은 저장 장치입니다 저장에는 두 가지 기능이 있습니다 첫 번째는 LAMP가 상태를 유지하는 곳입니다

그것이 바로 가상 머신입니다 구성을 저장합니다 그리고 그것이 저축 할 수있는 곳이기도합니다 일부 정적 컨텐츠 또는 이미지, 또는 귀하의 동영상, 또는 아무것도 그렇다면 클라우드 스토리지 솔루션을 얻는 방법에 대해 솔루션을 클러스터의 나머지 부분에 연결 하시겠습니까? 그리고 우리가 원했던 마지막 부분은 자동화입니다

우리는 어떻게이 모든 것을 하나로 모을 수 있습니까? 한 번의 클릭으로 클러스터를 만들 수 있습니다 [INAUDIBLE]에 대한 모든 구성을 가지고 있습니다 누군가가 원한다면 어디서나 repo에 코드를 작성하십시오 클러스터를 변경하려면 클러스터에 닿아 야합니다 코드를 터치 한 다음 다시 배포합니다

승인? SEBASTIAN WEIGAND :하지만 가장 중요한 것은 여기에있는 모든 것들, 만드는 것 또는 깰 수있는 것 이 솔루션은 Kubernetes입니다 제 말은, 다른 많은 것들처럼, 물론, 그러나 이것은 절대적으로 중요한 구성 요소와 같습니다 그게 효과가있다 페르난도 산체스 : 나는 동의한다 SEBASTIAN WEIGAND : 좋은 해결책이라고 생각합니다

페르난도 산체즈 : 왜 쿠 베르 네스인가? SEBASTIAN WEIGAND : OK, Kubernetes 친절 하네 우선, 그것은 표준입니다 그래서 우리가 Kubernetes에 명단을 쓰면, 그것은 밖으로있는 Kubernetes 제안에 작동 할 것입니다 그것은 누군가가 가지고있는 Kubernetes 환경에서 작동 할 것이며, 환경이 작동하면 그 외의 것들을 제공합니다 또한 실패를 통해 원하는 상태를 유지하며, 나는 페이징받을 필요가 없다는 것을 의미한다

Kubernetes는 재시작을 처리 할 것입니다 따라서 신뢰성 구성 요소는 Kubernetes가 끝내는 자동화에 의해 돌 보았다 제공 또한 확장 성을 제공합니다 그들은 일종의 손을 맞잡고갑니다

그래서 우리가 막대한 양의 교통 체증을 겪고 있다면, Kubernetes 스케일링 기능을 활용할 수 있습니다 자동 확장 기능 – 페르난도 산체스 : 나는 그것을 좋아한다 SEBASTIAN WEIGAND : – Vandelay Industries가 과거에 관심 있었던 수퍼 듀퍼 – 더 많은 인프라를 가동하고 필요에 따라 소비 할 수 있습니다 또한 프로그램하기가 상대적으로 쉽습니다 나는 비교적 말하기 때문에, 예, 그렇습니다

기발한 종류의 YAML 문법을 가지고있다 너는 주변에서 바이올린을 써야한다 그러나 일단 당신이 그것을 끝내면, 당신의 모든 주, 심지어 매우 복잡한 응용 프로그램, Kubernetes 서비스 내에서 실제로 매핑 될 수 있습니다 하지만 몇 가지 단점이 있습니다 관리하기가 어렵습니다

그리고, 사실, 저는 여기에 서있을 겁니다 그래서 사람들은 실제로 볼 수 있습니다 관리하기가 어렵습니다 움직이는 부분이 많은 큰 분산 시스템입니다 업그레이드하기가 어렵습니다

많은 이동 부품이있는 대형 분산 시스템 같은 것을 위해 확장하는 것은 매우 어렵습니다 또한 다른 인프라 서비스가 필요합니다 작동하려면 Kubernetes를 넣을 VM이 필요합니다 실제로 코드를 실행하려면 컴퓨터가 필요합니다

나머지 클러스터에 전원을 공급합니다 또한 응용 프로그램이 아닌 상태 비 저장 응용 프로그램을 선호합니다 물건을 챙겨야 할 국가가있다 백엔드에 그러나 나는이 문제의 대부분을 해결할 수 있다고 생각합니다

Google Kubernetes 엔진을 살펴 보겠습니다 그렇지 않으면 GKE로 알려져 있습니다 정말 대단한 점은 같은 프로를 모두 얻는 것입니다 그것은 여전히 ​​표준입니다 여전히 원하는 상태를 유지합니다

여전히 확장 성 및 안정성을 제공합니다 당신은 그것이 관리되는 보너스를 얻습니다 Google의 전설적인 SRE 팀이 당신은 실제로 저기로 가서 그들을 들여다 볼 수 있습니다 그러나 여전히 무국적 응용 프로그램을 선호합니다 페르난도 산체스 : 이해합니다

SEBASTIAN WEIGAND : 이것이 대부분의 문제를 해결합니다 우리가 인프라를 관리한다는 측면에서 볼 때, 그 상태가없는 부분은 예외입니다 그것에 대한 아이디어가 있습니까? FERNANDO SANCHEZ : 나는 그렇다 레거시 애플리케이션을 사용하는 것 그들은 무국적자로 작성되지 않았습니까? 상태를 일종의 파일 시스템에 저장하도록 작성되었습니다 당신은 comf 파일을 가지고 있고 상태 파일을 가지고 있습니다

따라서 단일 서버를 실행하는 대신, 우리는 100, 1,000 개의 컨테이너를 실행하려고합니다 동일한 응용 프로그램에서 실행하면 국가를 공유해야합니다 컨테이너는 무국적자입니다 컨테이너를 재부팅하는 경우 컨테이너의 파일 시스템 사라 이는 우리가 Drupal 컨테이너를 설치하면, 우리는 그것을 구성하고 거기에 물건을 넣기 시작합니다

재부팅하면 사라 졌어요 그렇다면 어떻게 시뮬레이션 할 것인가, 레거시 소프트웨어를 얻는 방법 그것이 유산에서 돌아가고 있다고 믿게합니다 인프라를 구축하는 동시에 장점을 제공합니다 현대 건축의? 그래서 우리가해야 할 일은 근본적으로 공유 파일 시스템을 가져와 모든 컨테이너 만들기 공유 파일 시스템에 액세스하고 모두가 동시에 읽을 수 있습니다 그들 모두가 동시에 글을 쓸 수 있어야합니다

그럼 쿠베 넷에서 어떻게 할거 니? 기본적으로 파일 시스템입니다 마운트는 많은 것을 읽고, 많은 것을 씁니다 모두가 익숙한가요? 그래서 여러 가지 해결책이 있습니다 그렇게하면 할 수 있습니다 예를 들어, 그 중 하나는 NFS만큼이나 간단합니다

NFS는 NFS 서버가 될 수 있습니다 그러나 NFS는 모든 스토리지 솔루션이 될 수 있습니다 NFS 인터페이스를 지원합니다 여러분이 좋아하는 스토리지 공급 업체가 거대한 시스템을 가질 수 있고, 매우 안전한 NFS를 제공한다 이를 클러스터에 연결할 수 있습니다

또는 주문형 NFS 서버를 사용할 수도 있습니다 Google 클라우드 파일 서버 전설적인 Google이 관리하는 스토리지를 제공합니다 SRE– 미안, 팀 그래서 기본적으로, 다른 일은 일어납니다

그 상태입니다, 그것은 정적 인 내용입니다 그것은 구성을위한 것이지만 많은 사람들이 LAMP를 사용하는 요즘에는 Drupal, 헤드리스 CMS라고하는 것입니다 이것이 의미하는 것은 Vandelay Industries가 어느 시점에서, 드루팔 (Drupal)과 워드 프레스 (WordPress)와 같은 방식을 좋아하지 않을 수도 있습니다 프론트 엔드를 찾으십시오 그들은 훌륭한 콘텐츠이기 때문에 Drupal을 사용하기를 원할지도 모릅니다 관리 시스템

사용자가 사용할 수있는 시스템입니다 콘텐츠를 만들고, 콘텐츠를 편집합니다 그리고 아마 Drupal을위한 UI를 제공하는 대신에, 드루팔 (Drupal)과 워드 프레스 (WordPress) 어쩌면 그들은 Drupal을위한 API와 같은 것을 사용하기를 원할 것입니다 그리고 워드 프레스, 중간에 API 게이트웨이를 넣어, 그런 다음 좋아하는 기술을 사용하십시오 프론트 엔드를 작성하려면 Redux에 반응하여 Angular, 그들이 원하는 것을 사용하든간에

그래서 당신은 두 세계의 장점을 얻습니다 당신은 프론트 엔드를 얻을 프론트 엔드가 API 게이트웨이를 호출합니다 API 게이트웨이는 Drupal 및 Out에서 콘텐츠를 가져옵니다 이것이 의미하는 것은 스토리지 시스템 이 상태가있는 것은 사실상 엄격한 요구 사항, 맞죠? 시스템의 주요 구성 요소가 아닙니다

왜냐하면 정적 인 콘텐츠가 아마 다른 곳에서 호스팅되기 때문입니다 귀하의 Reux Redux는 아마도 API 게이트웨이를 때리고있을 것입니다 API 게이트웨이가 다른 곳에서 가져 오는 중입니다 따라서 분산 저장 시스템에서 우리가 얻게 될 것은 무엇입니까? 기본 상태, 기본 구성 일뿐입니다 SEBASTIAN WEIGAND : 그리고 잠깐 만요

따라서 귀하는 Google 고객 엔지니어입니다 당신은 소매 공간에서 일합니다 실제 고객이 있습니까? 이 같은 것을 이용하고 싶습니까? Vandelay Industries만이 아닙니다 하지만 실제로는 실제 고객이 있습니다 이런 종류의 것에 관심이 있습니까? 페르난도 산체스 : 네, 우리는 수입, 수출, 건축을합니다

우리는 실제로 3 가지 작품이있는 고객이 있습니다 그들이 이것을 사용하고 있을지도 모른다 불행히도 오늘 전화를 걸지 못했습니다 그러나 이것은 오늘 살고있다, 헤드리스 CMS 아이디어 Drupal은 headless CMS로 사용 됨으로써 두 번째 생명을 얻고 있습니다

그래서 당신은 두 세계의 장점을 누릴 수 있습니다 프론트 엔드, 당신은 자신의 프론트 엔드를로드 할 수 있습니다, API 게이트웨이를 사용하고 Drupal을 CMS로 연결하십시오 SEBASTIAN WEIGAND : 그렇다면이 모든 것이 어떻게 생겼습니까? 페르난도 산체스 : 자세히 말하면, 우리는 무엇을 가지고 있을까요? 우리가 가지고있는 것은 소프트웨어를 실행하는 많은 컨테이너입니다 그래서 소프트웨어는 오래된 프로세스이며, 우리가 수년에 걸쳐 개발 한 콘텐츠 나는 아파치와 PHP를 가지고있다

우리는 GKE에서 실행되는 컨테이너와 컨테이너에서 실행 중입니다 즉,지도에서 자동 크기 조정, 가로 포드 autoscaler는 포드를 자동 크기 조정합니다 그런 다음 클러스터 자동 확장기가 노드를 자동 크기 조정합니다 트래픽이 극대화되면 클러스터 우리가 원하는대로 위아래로 확장합니다 정적 컨텐츠는 기본적으로 파일 공유로 작성됩니다

그리고 그 파일 공유는 Kubernetes에 읽음으로써 마운트됩니다 많은, 많은 마운트를 작성하십시오 그런 다음 왼쪽 또는 왼쪽면에서 기본적으로 관리되는 MySQL 데이터베이스가 있습니다 이것이 클라우드 SQL 서비스에서 사용하는 것이 무엇인지, 우리는 단지 버튼을 누르고, 관리 받는다 Google에서 처리하는 데이터베이스 백업을 프로그래밍하면됩니다

기본적으로 그냥 놓아 줘야합니다 다른 사람이 처리했습니다 그리고 우리는 우리가 사용하는 것을 지불합니다 자동 측정 우리는 우리가 사용하는 모든 것에 대해 문자 그대로 지불합니다

그리고 나서 아래쪽 부분에 우리가하고 싶었던 것들 기본적으로 UI를 통해 클립하지 않아도됩니다 많은 명령을 보내고이 일을 전개하는 데 몇 주가 걸립니다 우리는이 모든 것을 자동화하려고했습니다 이 경우 Terraform을 사용했습니다 예를 들어, 왜 토론하고 싶습니까? 우리는 그것을 위해 Terraform을 사용했습니다

SEBASTIAN WEIGAND : 글쎄, 내 말은, 나는 밖에서 사용할 수있는 것을 사용하는 것을 좋아한다 특정 고객이 무엇이든간에 친숙하다 예를 들어, 당신이 원한다면 인프라를 제공합니다 코드 기능으로 업계에서는 Terraform이 인기가있는 경향이 있습니다

결과적으로 우리는 솔루션을 작성하기로 결정했습니다 Terraform과 몇 가지 쉘 스크립트 사용 실제로 전체 환경을 부트 스트랩합니다 Terraform은 조금 어려울 수 있습니다 그런 의미에서 일어 서서 공급자를 구성해야합니다 또한 다른 백엔드를 구성해야합니다

등등과 다른 구름으로 등등 그러나 일단 우리가 이러한 모든 것을 함께하면, 정말로 당신은 그 어떤 것도 사용할 수 있습니다 인프라를 코드로 사용합니다 Google은 의미면에서 조금 다르게 작동합니다 우리는 파트너가되고 싶습니다

다른 오픈 소스를 많이 지원하는 것처럼 기술 페르난도 산체스 : 당연하지 SEBASTIAN WEIGAND : 그래서 우리는 확실히하고 싶습니다 이미 업계에서 사용하고있는 것이 무엇이든지, 우리는 지원하고 그것은 우리의 플랫폼에서 정말 잘 실행됩니다 그러나 호환성을 보장 받기를 원한다면, SLO가 사물과 관련되기를 원한다면, 또는 사물과 관련된 SLA, Deployment Manager라는 것을 사용할 수 있습니다

우리의 인프라 버전 코드입니다 페르난도 산체스 : 좋습니다 그리고 우리가 가지고있는 것은 데모입니다 그리고 데모를 위해 우리는 당신에게 부탁을 드리고 싶습니다 너희들이 cloudlamp

org에 간다면 – 우리는 두 가지 일을하기로 결정했습니다 첫 번째 것은 모든 코드를 얻는 것입니다 우리가 이것을 위해했고 오픈 소스를 위해 그래서 우리는 기본적으로 모든 것을 웹에 넣었습니다 당신이 그것을 복제하고, 어떤 것을 찾기 위해 영감을주기 위해 사용하는 것, 나도 몰라, 거기에 몇 가지 질문을하고 우리에게 몇 가지 요청을 엽니 다

이것은 며칠 동안 이미 실행되었습니다 그리고 그런데,이게 달리고, 너를 보여주고 싶었어 이게 실행 중입니다 Terraform 스크립트를 사용합니다 그래서 너희들이 여기서 우리 레포로 간다면, GitLab으로 이동합니다

여기에 모든 코드가 있습니다 그래서 당신은 Drupal, WordPress, Drupal 또는 WordPress에서 말 그대로 모든 코드를 볼 수 있습니다 이 사이트를 만드는 데 사용됩니다 사이트는 어떻게 보이나요? Google 플랫폼입니다 우리는 매우 적절하게 cloudlamp

org라는 프로젝트를 가지고 있습니다 그리고 우리는 여기에서 모든 것을 볼 수 있습니다 지난 몇 주 동안 우리 사이트에서 일어났습니다 실제로, 우리는 지금 일어나고있는 모든 것을 볼 수 있습니다 우리는 모든 것에 대한 감사 로그를 가지고 있습니다

사람들은 [무관심한] 입장에서하고있다 또한 자동화가 자체적으로 수행되고 있음을 보여줍니다 그럼이게 어떻게 운영되는거야? Kubernetes 클러스터가 실행 중입니다 이 경우 클러스터는 세 개의 노드로 시작합니다 그리고 우리는 노드 풀을 가지고 있습니다

하중에 따라 3에서 10까지 눈금을 얻으십시오 그래서 너희들이 동시에 그것을 쳤다면 우리에 대한 서비스 거부를 시작합니다 아마 이러한 것들이 스케일링되어야합니다 제발 그만 하지마 데모 신은 정말로 화를 낼 것입니다

그러나 우리는 그것과 관련된 스토리지를 가지고 있습니다 그리고 여러분이 볼 수 있듯이, 우리는 NFS 기반의 볼륨을 생성하고 있습니다 컨테이너에 부착하는 것 어느 시점에서 YAML도 볼 수 있습니다 그런 다음 작업 부하, 특히 사이트 자체를 실행하는 작업 부하를 실행하고 있습니다

PHP와 아파치는 복제 컨트롤러이다 누군가 당신에게 왜 배치를 사용했는지 묻고있을 것입니다 우리가 모든 것을 자동화하고 싶어한다는 것이 밝혀졌습니다 끝으로 종료 우리는 그것을 위해 Terraform을 사용했습니다

Terraform이 오픈 소스 프로젝트라는 사실을 알고 계실 것입니다 공급자와 함께 운영됩니다 그래서 Terraform에서 사용할 수있는 Kubernetes 제공 업체 우리가 이것을 설정할 때 아직 배포를 지원하지 않았습니다 그래서 우리는 복제 컨트롤러를 사용하기로 결정했습니다 SEBASTIAN WEIGAND : 그 생각은 잠깐 만요

너 지금 여기서 뭘보고있어? 실제로 Kubernetes 대시 보드입니다 그것은 GCP에 내장되어 있습니다 그래서 당신이 너 자신에게 궁금해하는 경우에, 잘, Kubernetes는 달리기와 겹침 선반을 얻는 재미이다, 하지만 그 멋진 웹 UI를 실행해야합니다 그리고 어떻게 실행해야합니까? 그리고 어떻게 생겼습니까? 이것은 실제로 콘솔에 내장되어 있습니다 그러면 서비스뿐만 아니라 이 특정 클러스터에 배포 한 이 프로젝트가 액세스 할 수있는 모든 클러스터, 그것은 꽤 멋지다

이제 우리가 사용하고있는 메모리를 볼 수 있습니다 CPU, 디스크 및 다른 여러 메트릭들, 알리미, 그런 것들 FERNANDO SANCHEZ : 음 – 흠 우리가 볼 수있는 것은 여기에 꼬투리가 있다는 것입니다 컨테이너와는 다른 포드가 있습니다

우리 일을하고있는 그래서 우리는 그 상태를 공유하는 3 개의 컨테이너를 가지고 있습니다 그리고 각각의 포드에는 두 가지가 있습니다 드루팔 (Drupal) 포드가 있습니다 그리고 드루팔 (Drupal) 포드, 우리는 실제로 그것을 들여다 볼 수 있습니다 실제 드루팔 (Drupal) 포드가 어떻게 돌아가고 있는지보십시오

요청 및 물건 얻기 사람들이 그걸 때리는 것처럼 보입니다 그런 다음 Cloud SQL 프록시라고하는 다른 포드가 있습니다 Cloud SQL Proxy가 실제로하는 것은 무엇입니까 각 컨테이너간에 보안 프록시를 추가합니다 및 데이터베이스

모든 것이 중간에 암호화되어 있습니다 데이터베이스가 완전히 보호됩니다 따라서 컨테이너와 데이터베이스 간의 연결 이 컨테이너를 통해 완전히 암호화되고 프록시됩니다 그래서 우리는 주 컨테이너에 사이드카를 사용합니다 그래서 Drupal 컨테이너는 데이터베이스 127

001:3306에 있습니다 프록시가이를 안전하게 얻고 있습니다 Cloud SQL 데이터베이스에 저장합니다

SEBASTIAN WEIGAND : 흥미로운 점은? 클라우드 SQL, 관리되는 SQL 인스턴스 및 관리되는 SQL 누구나 이용할 수있는 서비스, 우리는 일종의 표준 인증을 원하지 않는다 사람들은 악용하거나 악용 할 수 있습니다 그 슬라이드에서 다시 기억한다면 우리가 관리 보안에 관해 가지고 있었던, 이것은 우리가 원하는 기능 중 하나였습니다 그래서 우리는 순서대로 더 나은 인증을 원한다 백엔드에 대한 연결을 설정할 수 있습니다

개발자가 없이도이 작업을 수행 할 수 있습니다 그런 종류의 것을 이해할 수 있습니다 페르난도가 말했듯이, 그들은 단지 3306에서 실행중인 로컬 호스트라고 생각하십니까? 그리고 그들은 모두 설정됩니다 사이드카 방식으로 배치 결국 실제로 활용할 수있는 능력이 향상됩니다 플랫폼, 복잡성을 많이 관리 그것과 관련되어 있지만, 여전히 존재의 장점을 얻는 것 막 노출 된 물건을 가질 수 없다

나머지 인터넷과 기타 등등 페르난도 산체스 : 맞습니다 그러면 Kubernetes의 서비스 측면에서 우리는 또 무엇을 가지고 있습니까? 계기반? 기본적으로 부하 분산 / 서비스 검색을 볼 수 있습니다 그것의 조각 여기에는 기본적으로 두 가지가 있습니다

우리는 확실히 Kubernetes 팬인 서비스를 제공합니다 이것은 노드 포트 서비스입니다 우리는 입구를 연결하는 데 사용 그리고 우리는 또한 입구를 만들었습니다 로드 밸런서, HTTPS에서 TPS로드 밸런서를 인스턴스화합니다

이 경우 Let 's Encrypt로 TLS 인증서를 만들었습니다 Google Cloud Load Balancer에 업로드했습니다 따라서 Google Cloud Load Balancer 그 입구에 의해 제어되는 모든 TLS를하고있다 우리를 위해 처리하고, 그것은 완전히로드 오프 우리 모든 컨테이너에서 우리가 여기에 또 뭐 할까? 분명히 이것은 결국 VM에서 실행됩니다

이 경우, 우리는 처음에는 – 이것들은 세 개의 인스턴스 또는 우리의 Kubernetes입니다 클러스터 우리는 주인을 보지 못한다는 것을 알 수 있습니다 그것은 컨트롤 플레인이 Google에 의해 처리되기 때문입니다 우리는 주인에 대해 신경 쓸 필요가 없습니다

우리는 그 (것)들을 더 크거나 더 작게하는 것을 걱정할 필요가없는 다 Google이이를 수행 할 것입니다 주인이 있는지 확인합니다 그들은 일하고 있습니다 다른 하나는 NFS 서버입니다

우리는 풀링 된 관리 솔루션을 사용했고, Filestore는 실제로 잘 알려지지 않았기 때문에 우리가이 소프트웨어를 썼을 때 하지만 이제 Cloud Filestore를 사용할 수 있습니다 그저 관리되는 버전을 만들어야합니다 저장소에 표시되는 코드 NFS 서버는 단순한 VM입니다 SEBASTIAN WEIGAND : 그리고 우리는 오픈 소스와 협력하고 있습니다

커뮤니티, 특히 Terraform에서 업데이트되고 있는지 확인하고 있습니다 실제로 Filestore 인스턴스를 설명 할 수 있습니다 Terraform 내부에서이 모든 것을 얻을 수 있습니다 미래에 자동화됩니다 주목할 중요한 점은 백엔드가 무엇이든간에 그것은 많은 사람들이 읽는 한, 많은 것을 쓰고, 그것이 실제로 무엇인지는 중요하지 않습니다

그것은 모듈 식입니다 그것은 일종의 플러그 앤 플레이입니다 그리고 Kubernetes는 상관하지 않습니다 영구 볼륨 소유권과 영구 볼륨을 부여합니다 그리고 그 디스크에있는 비트들이 이러한 컨테이너에 장착됩니다

그리고 너는 모두 준비가되어있다 페르난도 산체스 : 그래,하지만 다시, 일반적인 철학 나는이 서버에 신경 쓰고 싶지 않다 누군가 나를 위해 그것을한다면, 그것을 계속 실행하고, 나를 위해 그것을 위아래로 확장하고, 나는 단지 내가 사용하는 것에 대해 지불하면, 그것은 나보다 훨씬 낫다 NFS 서버가 작동되고 패치가 적용된다는 것 최신의 최고의 보안, 토요일에 새벽 3시에 재부팅하지 않을 것입니다 또는 그와 비슷한 것이 겠지? SEBASTIAN WEIGAND : 우리는 한 달에 13 달러를 절약 할 수 있습니다

그래도 크기를 조정하면됩니다 페르난도 산체스 : 멋지다 Google에 돈을 아낄 수 있습니다 외부 IP 주소가 있습니다 우리가 한 다른 것은 고정 IP 주소를 만드는 것입니다

정적 IP 주소를로드 밸런서에 연결 그래서 우리는 DNS를 가리킬 수 있습니다 그리고 우리가 한 다른 것은 또한 사이트의 전체 DNS 구성 제어 Google 클라우드 DNS에서 가져 왔습니다 그래서 우리는 그것을 구성 할 수 있습니다 그리고 우리는 결국 서브 존에 동의 할 수 있습니다 어떤 시점에서 다른 섹션을 추가 할 수 있습니다

우리는 수입을위한 지역을 만들 수도 있고, 수출을위한 지역을 만들 수도 있습니다 어느 시점에서 아키텍처를위한 또 다른 아키텍처입니다 마지막 부분은 Stackdriver입니다 그리고 Stackdriver는 우리를 위해 모든 모니터링을합니다 Stackdriver에 대한 많은 작업을 수행하지 않았습니다

Stackdriver 녀석들을 여기서 찾을 수있을거야 우리보다 훨씬 좋은 대시 보드가 있습니다 그러나 내가 가진 것은 간단한 가동 시간 확인입니다 클라우드 램프에 오신 것을 환영합니다 사실, 지금은 오래된 파일입니다

어쨌든, 우리는 모니터와 분명히 내 인터넷을 가지고있다 연결에 실패했습니다 그러나 그것은 거의 그것이었다 제발, 사이트를 확인하십시오 레포를 확인하십시오

그리고, 분명히,이 아이디어는 우리가 이것을 구축하고 우리가가는대로 배우는 것입니다 기본적으로 업로드됩니다 기본적으로 모든 것을 가지고 사이트 업로드하기 우리가 사이트를 유지하는 동안 우리가 찾은 백업을 어떻게 진행할 수 있을까요? 우리는 어떻게 그것을 유지하기 위해 스스로 정책을 수립 할 것인가? 실행? 바라건대 어떤 시점에서 우리는 이메일에 연결할 것입니다 사람들은 실제로 사용자 이름과 암호를 만들 수 있습니다 그런 말과 의견을 남겨주세요

하지만 다른 것은 코드가 당신이 Terraform을 어떻게 사용하는지에 관심이있는 사람이 있다면 이 모든 것을 업로드 할 수 있습니다 언제든지 사용하고 질문과 답변을 보내주십시오 SEBASTIAN WEIGAND : 슬라이드로 다시 전환 할 수 있습니까? 시원한 페르난도가 언급 한 것처럼, 우리는 거기에 갈 그것의 cloudlamp

org에 당신이 실제로 거기에 간다면, 가장 먼저 당신은 블로그 포스트와 같은 모습을 볼 수 있습니다 그것은 많은 것들을 가지고 있습니다 또는 tinyurlcom/cloudlamp를 방문하십시오

실제로 소스 레포로 바로 연결됩니다 우리가 가지고있는 것들을 살펴볼 수 있습니다 그곳에 그저 면책 조항입니다 이것은 개념의 종류의 증거입니다

나는 이전에 언급했던 것처럼 이것이 우리가 해결하는 방법입니다 페르난도 산체스 : 우리 직원들입니다 우리의 20 % 프로젝트입니다 이것이 다른 누군가가 후원한다고 믿지 마십시오

이것은 세바스찬과 나 자신입니다 그래서 두 사람에게서 오는 것처럼 보이는 것이 있다면, 그것은 두 사람에게서 나왔기 때문입니다 SEBASTIAN WEIGAND : 그것은 두 명의 남자들에게서 나왔습니다 시간제 근무자이며 정규직으로 일하고있다 사랑스러운 고객들

또한, 그것에 대해 생각하는 방식으로, 레포를 한 번 살펴보고, 오, 그게 그랬어 왜 그 구성 요소가 흥미로운 지 알 겠어 그리고 나서 당신은 그 개념을 취할 수 있습니다 자신의 CI / CD 워크 플로우에서 구현하십시오 우리는 CI / CD 도구를 제공하지 않습니다

이 레포가가는 한 우리는 우리 플랫폼에서 어떤 것을 가지고 있습니다 그러나 그것은 또 다른 이야기입니다 그래서 – FERNANDO SANCHEZ : 그게 전부입니다 소프트웨어 Q & A가 있습니다

감사합니다 와 주셔서 너무 많이 그리고, 네, 질문을 위해 열어보십시오 [박수 갈채] [음악 재생]

[#15] Verbindung zu einer Oracle DB mit PHP

안녕하세요! 지금까지는 항상 PDO를 통해 MySQL 데이터베이스에 연결했습니다 오늘 저는 Oracle 데이터베이스에 연결한다는 사실을 알려 드리고자합니다

할 수 있습니다 연락 양식에 대한 예가 있습니다 다시 너 볼거야 기본적으로 차이점은 거의 없습니다

이제 폴더는 "Kontakt_Formular_Oracle"이라고합니다 나는 그 파일부터 시작하고 싶다 "Inc의 / db_connectphp" 여기서는 PDO 변형에서 데이터베이스에 대한 연결을 설정했습니다

이제이 파일을 사용하여 액세스 데이터를 중앙 집중식으로 정의합니다 여기에는 네 가지 변수가 있습니다 : 사용자, 암호, SID 및 문자 집합 이 파일 require () 함수를 사용하여 인덱스에 포함됩니다 이 아래에서 나는 함수와 실제 연결을 만든다 oci_connect () on

사용자 데이터는 앞서 언급 한 파일에서 가져온 것입니다 아래 연결 오류의 경우 오류 메시지를 표시합니다 아웃 여기에 호출 부호가있다 "아닙니다"와 같은 것을 의미합니다

따라서 연결이없는 경우 변수 "e" 해당 오류 여기 내려 줘 이 구문을 여기에서 반복해서 복사 할 수 있습니다 파일에 데이터베이스 연결이 필요합니다 연결 후 다음 구문이 매우 비슷하다는 것을 알 수 있습니다 PDO가 있습니다

먼저 변수가 다시 만들어지고 해당 변수와 함께 양식에서 채워진 내용 PDO의 prepare () 명령은 oci_parse ()라고하며, bindValue () 및 bindParam ()이 oci_bind_by_name ()이됩니다 execute () 함수는 이제 oci_execute ()라고 부릅니다 유일한 차이점은 오라클 철자법이 매우 PDO는 객체 지향이지만 절차 적으로 보인다 내가 다른 곳에서 설명하는 정확한 차이

PDO 표기법을 다시 살펴 보겠습니다 여기에 함수가있다 클래스에 속한 객체들 객체는 클래스의 인스턴스입니다 객체의 기능 객체 연산자로 호출됩니다 이것이 여기에있는 "->"입니다

프로 시저 스타일은 함수를 하나씩 처리합니다 이를 위해 어떤 객체도 필요하지 않습니다 게다가 SQL 쿼리가 약간 변경되었습니다 비교를 위해 MySQL 쿼리를 다시 추가했습니다 이것은 Oracle Query입니다

MySQL 데이터베이스에는 자동 증가 기능이 있습니다 이렇게하면 숫자를 입력 한 후 기본 숫자 키가 자동으로 설정됩니다 1로 레코드를 삽입하십시오 또한 증가라고합니다 N_ID 열이 MySQL 변종에 지정되지 않은 이유는 의지 값이 자동으로 증가 되었기 때문입니다

Oracle은이 기능을 알지 못합니다 그래서 N_ID 열을 명시 적으로 지정해야합니다 오라클은 소위 시퀀스를 사용합니다 내 시퀀스가 ​​호출됩니다 seq_tbl_kontaktformular 기본 키의 이름 : N_ID

그 뒤에 점과 "nextval"이라는 키워드가옵니다 "다음 가치"란 무엇입니까? 삽입 쿼리에 대한 시퀀스의 다음으로 높은 값이됩니다 통과시켰다 조만간 시퀀스를 만들어야합니다 날짜 더 이상 데이터베이스에 넘겨주지 않습니다

자동으로 현재 날짜가되도록 테이블을 생성 할 것이므로 저장됩니다 oci_bind_by_name 함수로 PHP 변수를 전달한 후 이, 그녀에게 질의를한다 oci_execute ()와 함께 그런 다음 $ stmt 변수의 잠금을 해제 할 수 있습니다 oci_free_statement ()와 함께 여기서는 선택 사항으로 간주 할 것입니다

다음 단계에서 데이터베이스 연결은 oci_close ()를 통해 닫힙니다 가장 최근에 $ stmt 변수를 릴리스해야합니다 아래의 다른 쿼리에서 다시 사용하고 싶습니다 모든 종류의 쿼리에 대해이 전체 구문을 사용할 수 있습니다 매개 변수가 필요없는 경우 (예 : 순수 매개 변수) "SELECT * FROM

"쿼리 oci_bind_by_name 함수를 그냥 둡니다 이제 원본 텍스트의 구문에 대해 확인하십시오 이것은 각 웹 서버에 복사해야합니다

나는 자유 프로그램 "fileZilla"를 사용한다 파일 -> 서버 관리자 아래에 저장된 연결 데이터가 있습니다 "새 서버"정보 연결 데이터를 입력 할 수 있습니까? 그런 다음 "확인"을 통해 닫습니다 위 왼쪽에는 저장된 항목이 표시되고 연결을 클릭하십시오 드래그 앤 드롭으로 서버의 전체 폴더를 드래그 할 수 있습니다

모든 파일이 복사되면 브라우저를 통해 문의 양식에 도달 할 수 있습니다 그래서 완벽 해 그건 이미 작동합니다 데이터베이스가 누락되었습니다 Oracle 서버와 웹 서버가 VPN 연결을 통해 있습니다

달성 나는 이미 연결되어있다 오라클 서버는 대부분 대기업에서 사용되지만 많은 기업에서도 사용됩니다 칼리지와 대학은 학업 목적으로 오라클의 입학 허가를 제공합니다 데이터베이스와 시퀀스를 생성하려면 "Oracle Developer"를 엽니 다

현재 버전 412를 사용합니다 인터넷에서 버전을 다운로드 할 수 있습니다 다시 말하지만, 이미 연결 데이터를 저장했습니다

새 연결 데이터를 입력하려면 여기를 클릭하십시오 더하기 기호 연결에 이름을 지정할 수도 있습니다 모든 액세스 데이터를 입력 한 경우 당신은 아래의 연결을 테스트 할 수 있습니다 모든 것이 작동하면 "저장"을 클릭하십시오

나는 지금 연결되어있다 주변을 직접 둘러 볼 수 있습니다 SQL 명령을 실행하십시오 "SELECT * FROM v $ Versioin"을 사용하면 Oracle 서버를 표시하십시오 그래서 우리는 "Database 12c Enterprise Edition"을 여기에 가지고 있습니다

좋습니다 단, 추가 정보로 전달해야합니다 테이블이 여기에 테이블 폴더에 표시됩니다 지금은 테이블이 없습니다 그게 바로 제가 새 것을 입을 이유입니다

오른쪽 클릭에 관하여 -> "새 테이블" 첫째, 나는 테이블의 이름을 용서합니다 "Tbl_Kontaktformular" 총 5 열이 필요합니다 여기서 MySQL 데이터베이스의 이름과 데이터 유형을 다시 볼 수 있습니다

데이터 유형은 Oracle에서 다른 것으로 불립니다 동영상 설명에있는 데이터 유형에 대한 링크를 찾을 수 있습니다 오라클 데이터베이스 데이터 유형을 지정하려면 위의 "고급"을 클릭하십시오 나는 그들의 이름에 칼럼을 쓴다 및 데이터 유형 "not null"로 설정하십시오

내가 말한 날짜는 내가 표준이라고 말했어 "CURRENT_TIMESTAMP" 현재 날짜와 시간은 항상 삽입 지점에 삽입됩니다 이제 기본 키 N_ID를 선택합니다 화살표를 사용하여 하나 이상의 열을 선택할 수 있습니다 내가 원한다면 여기에서도 이름을 바꿀 수있어

하지만 그대로두고 "OK"로 확인하십시오 보시다시피, 테이블이 여기에 만들어졌습니다 기본 표준 나는 테이블의 구조를 본다 내용을보고 싶으면 탭 "데이터"를 선택합니다 지금은 여전히 ​​비어 있습니다

우리가 아직 부족한 마지막 것 시퀀스입니다 내가 만들거야 "Sequences"를 마우스 오른쪽 버튼으로 클릭하고 "New Sequence"라고 말하십시오 나는 그 이름을 용서한다 이미 SQL 쿼리에 표시했습니다

seq_tbl_ kontaktformular_ 꾸벅 꾸벅 나는 1 번부터 시작한다 1 씩 증가, 내 최소값은 1입니다 내 최대 가치 여기가 이거 야 마지막에 "OK"를 눌러 확인하십시오

좋습니다 해보자 "귀하의 메시지가 성공적으로 저장되었습니다" 좋아 보인다 이 기호에 대하여 새로 고침 (새로 고침) 할 수 있습니까? 내 데이터가 도착했습니다 완벽한 모든 작품 🙂 보시다시피, 그 차이는 심각하지 않습니다

그러나 밖으로 볼 것이다 몇몇 미묘가있다 다음 비디오에서는 데이터베이스 및 테이블을 만드는 방법을 설명합니다 MySQL 또는 Oracle SQL 명령 다음에 봐요!