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