English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementação da manipulação de banco de dados mysqli com PHP

Do php5A partir da versão .0, foi adicionado suporte ao mysql(i), todas as novas funcionalidades foram adicionadas na forma de objetos

i significa melhorias, funcionalidades mais abrangentes, alta eficiência e estabilidade

Parâmetros de compilação:

./configure --with-mysql=/usr/bin/mysql_config \ #Usar Mysql ClientLibrary (libmysql) para construir
--with-mysqli=mysqlnd \ #Usar Mysql Native Dirver, ou seja, mysqlnd
--with-pdo-mysql=mysqlnd #Usar Mysql Native Dirver, ou seja, mysqlnd

Devido ao problema de direitos autorais, desde php5.3Começando com php, começou a usar mysqlnd para substituir libmysql.dll 
mysqlnd é um driver de banco de dados mysql desenvolvido pela empresa zend, que em todos os aspectos melhorou em comparação com o original

#Usar compilação mysqlnd

./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd com seus parâmetros

Ambos os métodos processo e objeto do mysqli são suportados

Três classes fornecidas pelo mysqli:

1、mysqli e conexões relacionadas
2、MySQLi_Result para processar conjunto de resultados
3、Classe pré-processada mysqli_stmt

#Definir conjunto de caracteres
set_charset

#Obter conjunto de caracteres
character_set_name

Obter objeto do banco de dados

//Método de criação do objeto mysqli 1
//Ocultar erros gerados pela conexão
$mysqli = new mysqli('127.0.0.1', 'root', '', 'test');
//Apenas pode usar a função para determinar se a conexão foi bem-sucedida
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
}
//Método de criação do objeto mysqli 2 Pode definir alguns parâmetros
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Definir tempo de espera
$mysqli->real_connect('127.0.0.1', 'root', '', 'test'); 

query: retorno false em caso de falha, select retorna objeto de conjunto de resultados em sucesso, outros retornam true não false, o que significa que a execução do sql foi bem-sucedida

Exemplo de conjunto de resultados vazio

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Definir tempo de espera
$mysqli->real_connect('127.0.0.1', 'root', '', 'test');
$sql = "insert into limove(`name`, `order`) values('aa', 11)";
$rst = $mysqli->query($sql);
$sql = "delete from limove where id = 221";
$rst = $mysqli->query($sql);
if($rst === false)
{
  ee($mysqli->errno);
  ee($mysqli->error);
}
#Número de linhas afetadas
ee($mysqli->affected_rows);
#ID inserido
ee($mysqli->insert_id);
ee($mysqli);

Existe um conjunto de resultados

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Definir tempo de espera
$mysqli->real_connect('127.0.0.1', 'root', '', 'test');
$sql = "select * from limove as limove_as";
$result = $mysqli->query($sql);
if($result === false)
{
  ee($mysqli->errno);
  ee($mysqli->error);
}
#Número de linhas
ee($result->num_rows);
#Número de colunas
ee($result->field_count);
#Número de campos
ee($result->field_count);
#Obter informações sobre todos os campos
$field_arr = $result->fetch_fields();
#Mover o ponteiro do campo
// $result->field_seek(1);
#Obter informações sobre os campos de forma sequencial
while($field = $result->fetch_field())
{
  ee($field);
}
#Mover o ponteiro do registro
$result->data_seek(1);
#Obter todos os dados de uma vez
$data = $result->fetch_all(MYSQLI_ASSOC);
#Obter o conjunto de resultados de forma associativa
$data = array();
$result->data_seek(0); #Resetar o ponteiro para o início
while($row = $result->fetch_assoc())
{
  $data[] = $row;
}
ee($data);
$result->free();
$mysqli->close();

Executar várias instruções de uma vez multiquery (não recomendado)

Não há conjunto de resultados, neste momento affected_rows só pode obter o número de linhas afetadas pela última linha

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Definir tempo de espera
$mysqli->real_connect('127.0.0.1', 'root', '', 'test');
$sql_arr = array(
  'insert into limove(id,`name`, `order`) values(null, 1, 2)',    
  'insert into limove(id,`name`, `order`) values(null, 1, 222)',    
  'delete from limove where `order` = 2',    
);
$sql = implode(';', $sql_arr);
$result = $mysqli->multi_query($sql);
if($result === false)
{
  ee($mysqli->errno);
  ee($mysqli->error);
}
$mysqli->close();

Existe um conjunto de resultados

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Definir tempo de espera
$mysqli->real_connect('127.0.0.1', 'root', '', 'test');
$sql_arr = array(
  'show tables',    
  'desc select * from limove',    
  'show create table limove',    
);
$sql = implode(';', $sql_arr);
$rst = $mysqli->multi_query($sql);
if($rst === false)
{
  ee($mysqli->errno);
  ee($mysqli->error);
}
do{
  $result = $mysqli->store_result();#obter o conjunto de resultados atual da seta do cursor
  $data = $result->fetch_all();
  ee($data);
})while($mysqli->next_result());#mover cursor para o próximo conjunto de resultados
$mysqli->close();

tratamento de transações:

$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb");
  //tratamento de transações
  $mysqli->autocommit(0);
  $error=true;
  $price=50;
  $sql="update zh set ye=ye-
  $result=$mysqli->query($sql);
  
    $error=false;
    echo "falha na transferência de Zhang San",
";
  }else{
    if($mysqli->affected_rows==0){
      $error=false;
      echo "o dinheiro de Zhang San não mudou";  
    }else{
      echo "transferência bem-sucedida da conta de Zhang San!
";
    }
  }
  $sql="update zh set ye=ye+{$price} where name='lisi1'";
  $result=$mysqli->query($sql);
  
    $error=false;
    echo "falha na transferência de Li Si",
";
  }else{
    if($mysqli->affected_rows==0){
      $error=false;
      echo "o dinheiro de Li Si não mudou";  
    }else{
      echo "transferência bem-sucedida para a conta de Li Si!
";
    }
  }
  if($error){
    echo "transferência bem-sucedida!";
    $mysqli->commit();
  }else{
    echo "transferência falhou!";
    $mysqli->rollback();
  }
  $mysqli->autocommit(1);
  $mysqli->close();

mysqli_stmt: classe de preparação mysqli (recomendada): representa uma instrução preparada, o servidor compila o SQL apenas uma vez

mysqli e mysqli_result podem implementar a mesma funcionalidade

vantagens:alta eficiência, adequado para situações onde as instruções SQL são iguais, mas os dados são diferentes, pode evitar a ocorrência de injeção SQL

exemplo de mysqli_stmt: comando não select

require 'fns.php';
//Método de criação do objeto mysqli 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');
//Apenas pode usar a função para determinar se a conexão foi bem-sucedida
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
  die;
}
$mysqli->set_charset('utf8);
$sql = "insert into limove values(?, ?, ?"; //Situações onde a frase é a mesma, mas os valores são diferentes
//Há métodos diretamente disponíveis no mysqli
$stmt = $mysqli->prepare($sql);
//Parâmetros de ligação
$stmt->bind_param('iss', $id, $name, $order);
for($i=0;$i<5;$i++{
  $id = 0;
  $name = 'name';
  $order = mt_rand(1, 1000);
  $stmt->execute();
}
//Último id
ee($stmt->insert_id);
//Linhas afetadas Nota: a última linha executada
ee($stmt->affected_rows);
//Número de erro
ee($stmt->errno);
//Mensagem de erro
ee($stmt->error);
//No objeto stmt pode-se ver mais informações
ee($stmt);
eee($mysqli);

Exemplo mysqli_stmt: select 1 

require 'fns.php';
//Método de criação do objeto mysqli 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');
//Apenas pode usar a função para determinar se a conexão foi bem-sucedida
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
  die;
}
$mysqli->set_charset('utf8);
$sql = "select * from limove where id

Aqui está o conteúdo completo que o editor compartilha com você sobre a implementação do php de manipulação do banco de dados mysqli. Espero que isso forneça uma referência útil e que todos apoiem e gritem o tutorial.

Você também pode gostar