Mysql(i)-Unterstützung wurde seit PHP5.0 hinzugefügt, und die neuen Funktionen werden in Form von Objekten hinzugefügt
i bedeutet verbesserte Funktionen, hohe Effizienz und Stabilität
Empfohlene MySQL-Video-Tutorials: „MySQL-Tutorial“
Parameter für die Kompilierzeit:
./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
Aus urheberrechtlichen Gründen ab PHP 5.3 PHP begann, mysqlnd zu verwenden, um libmysql.dll zu ersetzen
mysqlnd ist ein von der Firma Zend entwickelter MySQL-Datenbanktreiber. Im Vergleich zum Original hat er sich in allen Aspekten verbessert
#Kompilieren mit mysqlnd
./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 加上你的参数
MySQL-Prozess- und Objektmodi unterstützen die drei von
MySQL bereitgestellten Klassen:
1、mysqli 和连接相关的 2、MySQLi_Result 处理结果集 3、mysqli_stmt 预处理类
#Zeichensatz festlegen
set_charset
#Zeichensatz abrufen
Zeichensatzname
Datenbankobjekt abrufen
//创建mysqli对象方式 1 //屏蔽连接产生的错误$mysqli = new mysqli('127.0.0.1', 'root', '', 'test');//只能用函数来判断是否连接成功if(mysqli_connect_errno()) { echo mysqli_connect_error(); }//创建mysqli对象方式 2 可以设置一些参数$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');
Abfrage: Gibt bei Fehler „false“ zurück, „select“ gibt das Ergebnismengenobjekt erfolgreich zurück , andere geben true zurück, nicht falsch. Dies bedeutet, dass die SQL-Ausführung erfolgreich war
Beispiel ohne Ergebnismenge
$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$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); }#影响条数 ee($mysqli->affected_rows);#插入的id ee($mysqli->insert_id); ee($mysqli);
Mit Ergebnismenge
$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$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); }#行数 ee($result->num_rows);#列数 ee($result->field_count);#字段个数 ee($result->field_count);#获取所有字段的信息$field_arr = $result->fetch_fields();#移动字段的指针 // $result->field_seek(1);#依次获取字段的信息while($field = $result->fetch_field()) { ee($field); }#移动记录指针$result->data_seek(1);#一次获取所有数据$data = $result->fetch_all(MYSQLI_ASSOC);#关联数组方式获取结果集$data = array();$result->data_seek(0); #重置指针到起始while($row = $result->fetch_assoc()) { $data[] = $row; } ee($data);$result->free();$mysqli->close();
Mehrere ausführen Anweisungen gleichzeitig mehrfach abfragen (nicht empfohlen)
Es gibt keine Ergebnismenge. Zu diesem Zeitpunkt kann „betroffene_zeilen“ nur die Nummer der letzten betroffenen Zeile abrufen
$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$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();
Es gibt eine Ergebnismenge
$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$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();#获取当前光标所在的结果集 $data = $result->fetch_all(); ee($data); }while($mysqli->next_result());#光标移动到下一个结果集$mysqli->close();
Transaktionsverarbeitung:
$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb"); //事务处理 $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 "从张三转出失败 "; }else{ if($mysqli->affected_rows==0){ $error=false; echo "张三的钱没有变化"; }else{ echo "从张三账号中转出成功! "; } } $sql="update zh set ye=ye+{$price} where name='lisi1'"; $result=$mysqli->query($sql); if(!$result){ $error=false; echo "从李四转入失败 "; }else{ if($mysqli->affected_rows==0){ $error=false; echo "李四的钱没有变化"; }else{ echo "向李四账号中转入成功! "; } } if($error){ echo "转账成功!"; $mysqli->commit(); }else{ echo "转账失败!"; $mysqli->rollback(); } $mysqli->autocommit(1); $mysqli->close();
mysqli_stmt:mysqli-Vorverarbeitungsklasse (empfohlen): Stellt eine vorbereitete Anweisung dar, der Server kompiliert SQL nur einmal
Die gleiche Funktion kann mit mysqli und mysqli_result
erreicht werden