Aplicativos em PHP/Integração do PHP com SGBDs/MySQL
Aparência
Conectar ao MySQL
Usaremos:
banco - cliente
create table clientes(id int primary key auto_increment, nome char(45), data date); INSERT INTO `clientes` VALUES (1, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (2, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (3, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (4, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (5, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (6, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (7, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (8, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (9, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (10, 'João Brito10', '2007-01-12'); INSERT INTO `clientes` VALUES (11, 'João Brito11', '2007-01-13'); INSERT INTO `clientes` VALUES (12, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (13, 'Jorge da Cunha', '2007-01-12'); INSERT INTO `clientes` VALUES (14, 'Jorge da Cunha', '2007-01-12'); Recomendações: - Usar sempre os mesmos nomes de variáveis para mesmas funções. Exemplo: $link para receber a conexão. - Usar sempre as mesmas mensagens de erro para certos erros. Exemplo: mysql_query... 'Erro na consulta: ' . mysql_error() não esquecer de passar a funãoo do MySQL que retorna o erro
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Erro ao conectar conectar: ' . mysql_error());
}
Fechar a Conexão
print "<h2>FECHAR A CONEXÃO COM O MYSQL</h2>"; mysql_close($link);
Selecionar um Banco após a Conexão
print "<h2>SELECIONAR BANCO APÓS CONEXÃO</h2>";
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Erro ao conectar conectar : ' . mysql_error());
}else{
if(!$db_selected = mysql_select_db('cliente', $link)) die ('Erro ao selecionar o banco cliente : ' . mysql_error());
}
Executar Consulta SQL
print "<h2>EXECUTAR CONSULTA(Qualquer consulta SQL)</h2>";
$result = mysql_query('SELECT * FROM clientes',$link); //se $link não for especificado, será usado o ltimo aberto
if (!$result) {
die('Erro na consulta: ' . mysql_error());
}
Mover Ponteiro para um Registro Específico
print "<h2>MOVER PARA UM REGISTRO ESPECÍFICO</h2>";
$query = 'SELECT nome, data FROM clientes';
$result = mysql_query($query,$link);
if (!$result) {
die('Erro na consulta: ' . mysql_error());
}
/* obter as linhas (registros) em ordem reversa */
for ($i = mysql_num_rows($result) - 1; $i <= 0; $i--) {
if (!mysql_data_seek($result, $i)) {
echo "Não foi possível mover para a linha $i: " . mysql_error() . "\n";
continue;
}
if (!($row = mysql_fetch_assoc($result))) {
continue;
}
echo $row['nome'] . ' ' . $row['data'] . "<br />\n";
}
//mysql_free_result($result);
Retornar Todos os Registos em Forma de Array
print "<h2>RETORNAR TODOS OS REGISTROS COMO ARRAY</h2>";
mysql_fetch_array($result, MYSQL_BOTH); // Retorna todos os registros como array numérico e nomes
$result = mysql_query("SELECT id, nome FROM clientes");
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf ("ID: %s Nome: %s", $row[0], $row["nome"].'<br>');
}
Total de Registros
print "<h2>TOTAL DE REGISTROS</h2>";
$result = mysql_query("SELECT * FROM clientes", $link);
$num_rows = mysql_num_rows($result);
echo "$num_rows registros<br>";
<h2>Receber Registros Afetados por Consulta</h2>
<pre>
print "<h2>REGISTROS AFETADOS (INSERT, DELETE E UPDATE)</h2>";
mysql_query('DELETE FROM clientes WHERE id < 10');
printf("Registros excluídos: %d\n", mysql_affected_rows());
/* Com uma cláusula WHERE que nunca é verdadeira isso deve retornar 0 */
mysql_query('DELETE FROM mytable WHERE 0');
printf("Registros excluídos: %d\n", mysql_affected_rows());
Criar Banco de Dados
print "<h2>CRIAR BANCO DE DADOS</h2>";
$sql = 'CREATE DATABASE cliente2';
if (mysql_query($sql, $link)) {
echo "O banco de dados cliente2 foi criado<br>";
} else {
echo 'Erro criando o banco de dados: ' . mysql_error() . "<br>";
}
Nomes dos Bancos de Dados
print "<h2>NOMES DOS BD</h2>";
$db_list = mysql_list_dbs($link);
$i = 0;
$cnt = mysql_num_rows($db_list);
while ($i < $cnt) {
echo mysql_db_name($db_list, $i) . "<br>";
$i++;
}
Excluir Banco
print "<h2>EXCLUIR BANCO</h2>";
$sql = 'DROP DATABASE cliente2';
if (mysql_query($sql, $link)) {
echo "O banco de dados foi excluÃdo com sucesso<br>";
} else {
echo 'Erro ao excluir o banco de dados: ' . mysql_error() . "<br>";
}
<pre>
<h2>Retornar Número do Erro</h2>
<pre>
print "<h2>MYSQL_ERRNO</h2>";
if (!mysql_select_db("naoexistentebd", $link)) {
echo mysql_errno($link) . ": " . mysql_error($link). "<br>";
}
Informações sobre os Campos
print "<h2>INFORMAÃÇÕES SOBRE CAMPOS</h2>";
$i = 0;
while ($i < mysql_num_fields($result)) {
echo "Informação para a coluna $i:<br><br>";
$meta = mysql_fetch_field($result, $i);
if (!$meta) {
echo "Sem informação disponÃvel<br>";
}
echo "<pre>
blob: $meta->blob
max_length: $meta->max_length
multiple_key: $meta->multiple_key
name: $meta->name
not_null: $meta->not_null
numeric: $meta->numeric
primary_key: $meta->primary_key
table: $meta->table
type: $meta->type
default: $meta->def
unique_key: $meta->unique_key
unsigned: $meta->unsigned
zerofill: $meta->zerofill
";
$i++;
}
Retornar um Registro em Forma de Array de Campos
print "<h2>RETORNAR UM REGISTRO COM ARRAY DE CAMPOS</h2>";
$result = mysql_query("SELECT id,nome FROM clientes WHERE id = '12'");
if (!$result) {
echo 'Erro na consulta: ' . mysql_error();
exit;
}
$row = mysql_fetch_row($result);
echo $row[0]; // 42
echo $row[1]; // o valor do email
Tamanho de Campos
print "<h2>TAMANHO DE CAMPOS</h2>";
$result = mysql_query("SELECT id,nome FROM clientes WHERE id = '42'");
if (!$result) {
echo 'Erro na consulta: ' . mysql_error();
exit;
}
// Receberão tamanho do campo id como especificado no banco
// schema.
$length = mysql_field_len($result, 0);
echo $length;
Nomes de Campos
print "<h2>NOMES DE CAMPOS</h2>";
$res = mysql_query('select * from clientes', $link);
echo mysql_field_name($res, 0) . "<br>";
echo mysql_field_name($res, 2);
Nome de Tabela
print "<h2>NOME DE TABELA</h2>"; $table = mysql_field_table($result, $nomedeumcampodatabela); echo $table; // people
Tipos de Dados dos Campos
print "<h2>TIPO DE DADOS DE CAMPO</h2>";
$result = mysql_query("SELECT * FROM clientes");
$fields = mysql_num_fields($result);
$rows = mysql_num_rows($result);
$table = mysql_field_table($result, 0);
echo "Sua tabela '" . $table . "' tem " . $fields . " campos e " . $rows . " registros<br>";
echo "A tabela tem os seguintes campos:<br>";
for ($i=0; $i < $fields; $i++) {
$name = mysql_field_name($result, $i);
$type = mysql_field_type($result, $i);
$len = mysql_field_len($result, $i);
$flags = mysql_field_flags($result, $i);
echo $name . " " . $type . " " . $len . " " . $flags . "<br>";
}
ID do Insert
print "<h2>RECEBENDO ID GERADO POR INSERT</h2>";
mysql_query("INSERT INTO clientes (nome) values ('Jorge da Cunha')");
printf("O ltimo registro inserido tem id %d<br>", mysql_insert_id());
Lista de Campos
print "<h2>LISTAR BANCOS DO MYSQL</h2>";
$db_list = mysql_list_dbs($link);
while ($row = mysql_fetch_object($db_list)) {
echo $row->Database . "<br>";
}
Lista de Campos de Tabela
print "<h2>LISTAR CAMPOS DE TABELA</h2>";
while ($row = mysql_fetch_assoc($result)) {
echo $row["id"].'-';
echo $row["nome"].'-';
echo $row["data"]."<br>";
}
Lista de Tabelas de um Banco
print "<h2>LISTAR TABELAS DE BANCO</h2>";
$sql = "SHOW TABLES FROM cliente";
$result = mysql_query($sql);
if (!$result) {
echo "Erro no banco, não pode listas as tabelas<br>";
echo 'Erro no MySQL: ' . mysql_error();
exit;
}
while ($row = mysql_fetch_row($result)) {
echo "Tabela: {$row[0]}<br>";
}
Número de Campos
print "<h2>NÚMERO DE CAMPOS</h2>";
$result = mysql_query("SELECT id,nome FROM clientes WHERE id = '42'");
if (!$result) {
echo 'Erro na consulta: ' . mysql_error();
exit;
}
/* retorna 2 porque id,nome === 2 campos */
echo mysql_num_fields($result);
Nome de Tabela
print "<h2>NOME DE TABELA</h2>";
mysql_connect("localhost", "root", "");
$result = mysql_list_tables("cliente");
for ($i = 0; $i < mysql_num_rows($result); $i++) {
echo "Tabela: ", mysql_tablename($result, $i), "<br>";
}
<h2>Automaticamente instalar uma tabela no MySQL com PHP</h2>
<pre>
$table_def = "id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,";
$table_def .= "student_id INT(11) NOT NULL,";
$table_def .= "f_name TINYTEXT NOT NULL,";
$table_def .= "l_name TINYTEXT NOT NULL,";
$table_def .= "supervisor TINYTEXT NOT NULL,";
$table_def .= "building TINYTEXT NOT NULL,";
$table_def .= "email TINYTEXT NOT NULL,";
$table_def .= "score SMALLINT(6) NULL,";
$table_def .= "stamp DATETIME NOT NULL,";
$table_def .= "UNIQUE KEY id (id)";
if (!@mysql_query ("CREATE TABLE $tablename ($table_def)")) {
echo "The database table, '$tablename', could not be created.";
} else {
echo "Successfully created the '$tablename' table.";
}
Teste se tabela existe no MySQL
function table_exists ($table, $db) {
$tables = mysql_list_tables ($db);
while (list ($temp) = mysql_fetch_array ($tables)) {
if ($temp == $table) {
return TRUE;
}
}
return FALSE;
}
/** How to use it **/
if (table_exists(test_table, my_database)) {
echo"Yes the table is there.";
}
/*
akxter, http://www.oxyscripts.com/itemdisplay.php?id=1003&code=yes
And a shorter way. In the above example mysql_list_tables is deprecated in favor of mysql_query().
*/
// here is a much more elegant method to check if a table exists ( no error generate)
if( mysql_num_rows( mysql_query("SHOW TABLES LIKE '".$table."'")))
{
//...
}
Importar e Emportar no MySQL
Exportar CSV para MySQL
function exportarCSV_a_mySQL($fileCSV)
{
$registros=0;
$ruta=$fileCSV['tmp_name'];
if(!file_exists($ruta))
{return false;}
$tabla=quitar_extension($fileCSV['name']);
$borra_tabla="DROP TABLE `".$tabla."`";
mysql_query($borra_tabla);
$f=fopen($ruta,"r");
if($f)
{
echo "<b>Guardando CSV en la BDD :</b><br />";
$contenido=fread($f,filesize($ruta));
fclose($f);
$contenido=ereg_replace("\r\n", "\n" , $contenido); // convertimos windows a unix
$lineas=explode("\n",$contenido);
$titulo=explode(";",$lineas[0]);
$NUM_CAMPOS=count($titulo);
$sql_generado_para_eliminar="";
$crear_tabla_campos="";
for($i=0;$i<$NUM_CAMPOS;$i++)
{
$titulo[$i]=ereg_replace("\"", "" , $titulo[$i]); // kitamos comillas
$sql_generado_para_eliminar.=" AND `".$titulo[$i]."` =''";
$crear_tabla_campos.="`".$titulo[$i]."` varchar(60) NOT NULL";
if($i+1!=$NUM_CAMPOS)// si no es el ultimo , ponemos coma
{
$crear_tabla_campos.=",";
}
}
$crear_tabla="CREATE TABLE `".$tabla."` (".$crear_tabla_campos.") ENGINE=MyISAM DEFAULT CHARSET=latin1;";
mysql_query($crear_tabla);
$linea=1;
do
{
$insertar_titulos="";
$insertar_campos="";
$campo=explode(";",$lineas[$linea]);
for($i=0;$i<$NUM_CAMPOS;$i++)
{
$campo[$i]=ereg_replace("\"", "" , $campo[$i]);
$insertar_titulos.=" `".$titulo[$i]."` ";
$insertar_campos.=" '".$campo[$i]."' ";
if($i+1!=$NUM_CAMPOS)// si no es el ultimo , ponemos coma
{
$insertar_titulos.=",";
$insertar_campos.=",";
}
}
$sql="INSERT INTO `".$tabla."` ( ".$insertar_titulos." ) VALUES ( ".$insertar_campos." );";
if(mysql_query($sql))
{
echo ". ";
$registros++;
}
else
{echo "X ";return false;}
$linea++;
}while(next($lineas));
$sql="DELETE FROM `".$tabla."` WHERE 1".$sql_generado_para_eliminar;mysql_query($sql);
echo "<br />";
return $tabla;
}
else
{
return false;
}
}
function quitar_extension($archivo)
{
$extension = strrchr($archivo,".");
$pos=strpos($archivo,$extension);
return substr($archivo,0,$pos);
}
Exemplo de chamada:
$tabla = exportarCSV_a_mySQL($_FILES['archivo_csv']);
if($tabla)
{
echo "Export OK in mysql table : ".$tabla;
}
else
{
echo "Error in export ...";
}