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

Implementierung der Manipulation von MySQL-Datenbanken mit PHP

从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加

i表示改进的意思 功能多、效率高、稳定

编译时参数:

./configure --with-mysql=/usr/bin/mysql_config \ #使用 Mysql ClientLibrary(libmysql)构建
--with-mysqli=mysqlnd \ #使用 Mysql Native Dirver 即mysqlnd
--with-pdo-mysql=mysqlnd #使用 Mysql Native Dirver 即mysqlnd

由于版权问题 从 php5.3开始 php开始用 mysqlnd 替代 libmysql.dll 
mysqlnd 是zend公司开发的mysql数据库驱动,相比原来各方面都有所提高

#使用mysqlnd编译

./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 加上你的参数

mysqli 过程、对象方式都支持

mysqli提供的三个类:

1、mysqli 和连接相关的
2、MySQLi_Result 处理结果集
3、mysqli_stmt 预处理类

#设置字符集
set_charset

#获取字符集
character_set_name

获取数据库对象

//Methode zur Erstellung eines mysqli-Objekts 1
//Fehler der Verbindung unterdrücken
$mysqli = new mysqli('127.0.0.1', 'root', '', 'test');
//kann nur mit Funktionen bestimmt werden, ob die Verbindung erfolgreich war
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
}
//Methode zur Erstellung eines mysqli-Objekts 2 Einige Parameter können festgelegt werden
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Zeitüberschreitung einstellen
$mysqli->real_connect('127.0.0.1', 'root', '', 'test'); 

Anfrage: Fehlschlag gibt false zurück, select gibt Resultatobjekt zurück, andere geben true zurück, was bedeutet, dass die sql-Ausführung erfolgreich war

Beispiel ohne Resultate

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Zeitüberschreitung einstellen
$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);
}
#Anzahl der betroffenen Zeilen
ee($mysqli->affected_rows);
#Eingefügter ID
ee($mysqli->insert_id);
ee($mysqli);

Es gibt Resultate

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Zeitüberschreitung einstellen
$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);
}
#Zeilenzahl
ee($result->num_rows);
#Spaltenzahl
ee($result->field_count);
#Anzahl der Felder
ee($result->field_count);
#Alle Informationen zu den Feldern abrufen
$field_arr = $result->fetch_fields();
#Zeiger auf das Feld verschieben
// $result->field_seek(1);
#Informationen zu den Feldern nacheinander abrufen
while($field = $result->fetch_field())
{
  ee($field);
}
#Zeiger auf das Record verschieben
$result->data_seek(1);
#Alle Daten auf einmal abrufen
$data = $result->fetch_all(MYSQLI_ASSOC);
#Ergebnisse mit assoziativer Array-Methode abrufen
$data = array();
$result->data_seek(0); #Pfeil zurücksetzen auf Anfang
while($row = $result->fetch_assoc())
{
  $data[] = $row;
}
ee($data);
$result->free();
$mysqli->close();

Einmal mehrere Anweisungen ausführen multiquery (nicht empfohlen)

Keine Resultate, in diesem Fall kann affected_rows nur die Anzahl der letztlich betroffenen Zeilen zurückgeben

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Zeitüberschreitung einstellen
$mysqli->real_connect('127.0.0.1', 'root', '', 'test');
$sql_arr = array(
   1, 2)    
   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();

Es gibt Resultate

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//Zeitüberschreitung einstellen
$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();#Ergebnissatz am aktuellen Cursor speichern
  $data = $result->fetch_all();
  ee($data);
)}while($mysqli->next_result());#Kursor auf den nächsten Ergebnissatz bewegen
$mysqli->close();

Transaktionsverarbeitung:

$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb");
  //Transaktionsverarbeitung
  $mysqli->autocommit(0);
  $error=true;
  $price=50;
  $sql="update zh set ye=ye-{$price} where name='zhangsan'";
  $result=$mysqli->query($sql);
  if(!$result){
    $error=false;
    echo "Überweisung von Zhang San fehlgeschlagen"
";
  }else{
    if($mysqli->affected_rows==0){
      $error=false;
      echo "Das Geld von Zhang San hat sich nicht geändert.";  
    }else{
      echo "Erfolgreich vom Konto von Zhang San überwiesen!"
";
    }
  }
  $sql="update zh set ye=ye+{$price} where name='lisi1'";
  $result=$mysqli->query($sql);
  if(!$result){
    $error=false;
    echo "Überweisung von Li Si fehlgeschlagen"
";
  }else{
    if($mysqli->affected_rows==0){
      $error=false;
      echo "Das Geld von Li Si hat sich nicht geändert.";  
    }else{
      echo "Erfolgreich auf das Konto von Li Si eingezahlt!"
";
    }
  }
  if($error){
    echo "Überweisung erfolgreich!";
    $mysqli->commit();
  }else{
    echo "Überweisung fehlgeschlagen!";
    $mysqli->rollback();
  }
  $mysqli->autocommit(1);
  $mysqli->close();

mysqli_stmt: mysqli-Präparationsklasse (empfohlen): Stellt ein vorbereitetes Statement dar, das auf dem Server nur einmal kompiliert wird

mysqli und mysqli_result können die gleiche Funktion realisieren

Vorteile:Hoch effizient, geeignet für Anweisungen, die gleich sind, aber unterschiedliche Daten haben, kann die Entstehung von SQL-Injektionen verhindern

mysqli_stmt-Beispiel: Keine select-Anweisung

require 'fns.php';
//Methode zur Erstellung eines mysqli-Objekts 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');
//kann nur mit Funktionen bestimmt werden, ob die Verbindung erfolgreich war
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
  die;
}
$mysqli->set_charset('utf8);
$sql = "insert into limove values(?, ?, ?"; //Fälle, bei denen die Werte gleich sind, aber die Anweisungen unterschiedlich sind
//Es gibt direkte Methoden in mysqli
$stmt = $mysqli->prepare($sql);
//Parameter binden
$stmt->bind_param('iss', $id, $name, $order);
for($i=0;$i<5;$i++{
  $id = 0;
  $name = 'name';
  $order = mt_rand(1, 1000);
  $stmt->execute();
}
//Letzte id
ee($stmt->insert_id);
//Betroffene Zeilen Anzahl: Hinweis: Die letzte ausgeführte
ee($stmt->affected_rows);
//Fehlercode
ee($stmt->errno);
//Fehlermeldung
ee($stmt->error);
//Im stmt-Objekt können mehr Informationen angezeigt werden
ee($stmt);
eee($mysqli);

Beispiel für mysqli_stmt: SELECT-Anweisung 1 

require 'fns.php';
//Methode zur Erstellung eines mysqli-Objekts 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');
//kann nur mit Funktionen bestimmt werden, ob die Verbindung erfolgreich war
if(mysqli_connect_errno())
{
  echo mysqli_connect_error();
  die;
}
$mysqli->set_charset('utf8);
$sql = "select * from limove where id

Diese Anleitung zur Manipulation von MySQL-Datenbanken mit PHP, die ich Ihnen zur Verfügung gestellt habe, ist das Ende meines Beitrags. Ich hoffe, sie ist für Sie eine Referenz und ich hoffe, dass Sie die Anleitung unterstützen und mehr Lärm machen.

Möchten Sie auch sehen