Aula 02 - Conectando no banco de dados
Primeiramente criamos a conexão com o DB. A notação para a criação
da conexão é:
$conn = new mysqli(SERVER, USERNAME, SENHA, NOME_BANCO);
ou:
$conn = mysqli_connect(SERVER, USERNAME, SENHA, NOME_BANCO); O tratamento de erro é feito utilizando o parametro errno. Esse parametro é acessado pelo objeto de retorno da conexão e retorna 0 em caso de sucesso e outro código em caso de erro:
if ($conn->connect_errno) {
die('Falhou em conectar: ' . $conn->connect_errno);
}
Por fim retornamos o valor da variável de conexão para encerrar a lógica do arquivo (não é obrigatório).

$conn = new mysqli(SERVER, USERNAME, SENHA, NOME_BANCO);
ou:
$conn = mysqli_connect(SERVER, USERNAME, SENHA, NOME_BANCO); O tratamento de erro é feito utilizando o parametro errno. Esse parametro é acessado pelo objeto de retorno da conexão e retorna 0 em caso de sucesso e outro código em caso de erro:
if ($conn->connect_errno) {
die('Falhou em conectar: ' . $conn->connect_errno);
}
Por fim retornamos o valor da variável de conexão para encerrar a lógica do arquivo (não é obrigatório).
Aula 03 a 04 - Criando tabela no banco / Inserindo registros
Aqui criamos uma tabela utilizando uma query injetada em PHP. Foi
criado um tratamento de erro para o caso da tabela já existir,
entretanto como já visto em outras aulas o PHP (acho que minha
versão) retorna um Erro Fatal quando a tabela já existe,
desse modo ele sequer roda o tratamento do erro.
Só por razões didáticas criei uma rotina para fazer esse teste, muito embora não veja sentido para isso pois acho mais correto criar as tabelas direto no SQL.
Vamos agora criar uma rotina para inserir dados na tabela. No arquivo de criação passamos uma query com o comando SQL TRUNCATE na tabela.
O comando SQL TRUNCATE apaga todos os dados e retorna a tabela para o estado inicial, apagando inclusive os índices. Não utilizar sem necessidade.
Em seguida inserimos os dados via PHP, recuperando os dados de um arquivo '.sql' externo utilizando a função file_get_contents().
Depois executamos uma query SELECT para apresentar os dados da tabela. Aqui foi utilizada uma constante do PHP PHP_EOL (endo of line). Ele só faz sentido quando executamos o PHP em linha de comando pois não funciona em textos renderizados para o browser.

Só por razões didáticas criei uma rotina para fazer esse teste, muito embora não veja sentido para isso pois acho mais correto criar as tabelas direto no SQL.
Vamos agora criar uma rotina para inserir dados na tabela. No arquivo de criação passamos uma query com o comando SQL TRUNCATE na tabela.
O comando SQL TRUNCATE apaga todos os dados e retorna a tabela para o estado inicial, apagando inclusive os índices. Não utilizar sem necessidade.
Em seguida inserimos os dados via PHP, recuperando os dados de um arquivo '.sql' externo utilizando a função file_get_contents().
Depois executamos uma query SELECT para apresentar os dados da tabela. Aqui foi utilizada uma constante do PHP PHP_EOL (endo of line). Ele só faz sentido quando executamos o PHP em linha de comando pois não funciona em textos renderizados para o browser.
Aula 05 a 06 - Operador like / Buscando parte de uma string
Nessa aula vamos aplicar filtros para busca de palavras no DB. Para
a inserção de dados na busca foi utilizada a variável
$argv[] que retorna os dados passados como argumento na
linha de comando do PHP. Como estou trabalhando com o XAMPP não
temos a conexão com MySQL em prompt de comando nativo então fiz a
recuperação de dados em um html <input>.
Para a seleção executamos uma query SELECT com o operador LIKE que busca o termo digitado. No exemplo foi feito o statement para proteção contra SQL inject. Para a busca funcionar com valores parciais concatenei os caracteres '%' na variável.

Para a seleção executamos uma query SELECT com o operador LIKE que busca o termo digitado. No exemplo foi feito o statement para proteção contra SQL inject. Para a busca funcionar com valores parciais concatenei os caracteres '%' na variável.
Aula 07 - Busca por relevancia
Para criarmos buscas por relevancia primeiramente devemos criar uma
chave na tabela chamada FULLTEXT passando as colunas que
devem ser incluidas na chave.
ALTER TABLE posts ADD FULLTEXT KEY title (title, body);
Essa chave necessita que a Engine do DB seja MyISAM ou INNODB. No primeiro caso o retorno em caso de ocorrencia é 1 e caso contrário 0.
Com a Engine INNODB o resultado é um valor de acordo com a quantidade de ocorrencias.
A query SQL é montada como segue:

ALTER TABLE posts ADD FULLTEXT KEY title (title, body);
Essa chave necessita que a Engine do DB seja MyISAM ou INNODB. No primeiro caso o retorno em caso de ocorrencia é 1 e caso contrário 0.
Com a Engine INNODB o resultado é um valor de acordo com a quantidade de ocorrencias.
A query SQL é montada como segue:
SELECT *, MATCH(title, body) AGAINST(? IN BOOLEAN MODE) as
score FROM posts ORDER BY score;
Essa query faz o filtro de acordo com a relevancia do termo
pesquisado nos campos indexados.
Aula 08 - Transactions
Transactions permitem definir se uma query será ou não
executada.
Para iniciar uma transaction utilizamos o comando begin_transaction(). Uma ver iniciada uma trasaction ela será executada caso receba o valor commit() e não será executada caso receba o comando rollback()

Para iniciar uma transaction utilizamos o comando begin_transaction(). Uma ver iniciada uma trasaction ela será executada caso receba o valor commit() e não será executada caso receba o comando rollback()
Aula 09 - Manipulando erros
Podemos verificar erros com o mysqli_report(). Essa função
aceita algumas constantes. Utilizamos duas delas:
MYSQLI_REPORT_ERROR mostra os erros de SQL;
MYSQLI_REPORT_OFF desabilita a apresentação de erros;
Temos ainda as constantes: MYSQLI_REPORT_STRICT, MYSQLI_REPORT_INDEX e MYSQLI_REPORT_ALL. Em nosso exemplo utilizamos uma condição de debug: true para ambiente de desenvolvimento e debug: false para ambiente de produção.

MYSQLI_REPORT_ERROR mostra os erros de SQL;
MYSQLI_REPORT_OFF desabilita a apresentação de erros;
Temos ainda as constantes: MYSQLI_REPORT_STRICT, MYSQLI_REPORT_INDEX e MYSQLI_REPORT_ALL. Em nosso exemplo utilizamos uma condição de debug: true para ambiente de desenvolvimento e debug: false para ambiente de produção.
$debug = false;
if ($debug) {
mysqli_report(MYSQLI_REPORT_ERROR);
} else {
mysqli_report(MYSQLI_REPORT_OFF);
}
if ($debug) {
mysqli_report(MYSQLI_REPORT_ERROR);
} else {
mysqli_report(MYSQLI_REPORT_OFF);
}
Aula 10 - Introdução a relacionamentos
Relacionamentos em DB. 1 x 1, 1 x n e n x n
Criação de uma tabela com FOREIGN KEY para relacionamento.
Utilização do JOIN, LEFT JOIN e RIGHT JOIN. A FOREIGN KEY no padrão normal não funciona com a engine MyISAM

Criação de uma tabela com FOREIGN KEY para relacionamento.
Utilização do JOIN, LEFT JOIN e RIGHT JOIN. A FOREIGN KEY no padrão normal não funciona com a engine MyISAM
Aula 12 - Relacionamento muitos para muitos
Criada tabela de users e tabela de ligação entre
users e posts. Não foram criadas chaves estrangeiras.
A ligação entre as tabelas foi feita com dois INNER JOIN na
query.

SELECT * FROM likes
INNER JOIN users ON likes.user_id = users.id
INNER JOIN posts ON likes.post_id = posts.id;
INNER JOIN users ON likes.user_id = users.id
INNER JOIN posts ON likes.post_id = posts.id;