Ab PHP 5.0 können Sie nicht nur die frühen MySQL-Datenbankerweiterungsfunktionen verwenden, sondern auch die neu erweiterte MySQL-Datenbank verwenden, um mit der MySQL-Datenbank zu kommunizieren, die in einer Klasse gekapselt ist, bei der es sich um eine objektorientierte Technologie handelt. kann nur in PHP5 und MYSQL4,1 oder höheren Versionen verwendet werden. (i) gibt an, dass die Ausführungsgeschwindigkeit bei Verwendung von mysqli schneller, bequemer und effizienter ist und der Datenbankzugriff sicherer werden kann (da die Klassenmodus wird verwendet)
Einfacher Prozess mit MySQL
PHP.ini-Konfigurationsdatei festlegen
extension=php_mysqli.dll
//Verbindung herstellen
$conn = new mysqli($servername, $username, $password, $dbname);
//Verbindung erkennen
if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
//Den Rückgabewert der Datenbank abrufen
if($stmt=$con->prepare("SELECT username,password FROM member WHERE username=? AND password=?")) { $stmt->bind_param("ss",$username,$password); $stmt->execute(); $stmt->bind_result($U,$P); $HasData=false; while($stmt->fetch()) { $HasData=true; echo "username->".$U." password->".$P."<br>"; } }
//Verbindung schließen
$conn->close();
//Gemeinsame Grammatik
INSERT INTO [Tabellenname] ([Feld 1],[Feld 2]) VALUES ([Wert 1],[Wert 2]);
SELECT * FROM [Tabellenname] WHERE [Ausdruck] ORDER BY [Feld 1],[ASC/DESC nach oben/unten] [Feld 2],[ASC/DESC nach oben/unten];
DELETE FROM [table name] WHERE [expression];
UPDATE [Tabellenname] SET [Feld 1]=[Wert 1],[Feld 2]=[Wert 2] WHERE [Ausdruck];
Ermitteln Sie die Gesamtzahl der Zeilen: SELECT COUNT(*) FROM [table]
//Chinesische verstümmelte Zeichen
//针对页面 header("Content-Type:text/html;charset=utf-8"); //针对数据库 mysqli->query("SET CHARACTER SET 'utf8'");//读库 mysqli->query("SET NAMES 'utf8'");//写库
Hier sind einige Beispiele
Stellen Sie eine Verbindung zu MySQL her
Erstellen Sie die MYSQL-Konfigurationsdatei config.ini.php
Der Inhalt von config.ini.php ist wie folgt:
<?php $dbhost ="locallhost"; $dbuser = "hehehe"; $dbpwd = "123456"; $dbname = "Student"; $charName = "gbk2312"; 设置查询字符集gbk,gbk2312,utf-8 ?>
(Verwenden Sie mysqli, um eine Verbindung zur MYSQL-Datenbank herzustellen)
requery_once("config.ini.php"); $mysqliObj = new mysqli($dbhost,$dbuser,$dbpwd,$dbname); if(mysqli_connect_errno()){ echo "连接失败".mysqli_connect_error(); exit(); } $mysqliObj->query("set name $charName");
(Andere Operationen)
Abfrage
(单条查询) $sql = "drop table if exists user;"; $mysqliObj->query($sql); (多条查询) $musqliObj->multip_query($sql) 返回执行$sql受影响的行数() if($mysqliObj->query($sql)) echo $mysqliObj->affected_rows; insert 插入时,返回插入的id (很有用) $num = $mysqliObj->insert_id;
Drei Arten der Verarbeitung von Abfrageergebnissen
$sql = "select * from user"; $result = $mysqli->query($sql); (1)fetch_row() 返回索引数组 fetch_row() while(list($id,$name,$pwd)=$result->fetch_row()){ echo "id: ".$id." name:".$name." pwd:".$pwd."<br>"; } (2)fetch_assoc() 返回关联数组 fetch_assoc() while ($row = $result->fetch_assoc()){ echo "id:".$row["userId"]." name:".$row["userName"]." pwd:".$row["password"]."<br>"; } (3)fetch_object()返回对象 while($row = $result->fetch_object()){ echo "id:".$row->userId." name:".$row->uerName." pwd:".$row->password."<br>"; }
Assoziative Arrays sind verschachtelte Arrays, wie zum Beispiel:
<?php $data = array( array('name' => 'John Smith', 'home' => '555-555-5555', 'cell' => '666-555-5555', 'email' => 'john@myexample.com'), array('name' => 'Jack Jones', 'home' => '777-555-5555', 'cell' => '888-555-5555', 'email' => 'jack@myexample.com'), array('name' => 'Jane Munson', 'home' => '000-555-5555', 'cell' => '123456', 'email' => 'jane@myexample.com') ); ?>
Verwenden Sie die mysqli_stmt-Klasse
Die MySQL4.1-Version bietet einen Vorverarbeitungsmechanismus (vorbereitete Anweisung), mit dem der gesamte Befehl nur einmal an den MYSQL-Server gesendet werden kann. In Zukunft muss MYSQL den Befehl nur einmal analysieren, was den Bedarf erheblich verringert Die Datenmenge verbessert auch die Effizienz der Befehlsverarbeitung (beachten Sie, dass close() sofort geschlossen werden sollte, wenn die Verbindung nicht benötigt wird)
Schritte:
1. Bereiten Sie SQL-Befehle vor
$sql = "in Benutzer(name,pwd) Werte(?,?) einfügen";
$stms = $mysqli->prepare($sql);
2. Daten binden
$stms->bind_param('ss',$name,$pwd); (Hinweis 'ss': Es muss den folgenden Variablen entsprechen ($name,$pwd)
durch
Teig- oder Floattyp
S
b Binär (Blob, binäre Bytefolge)
)
$name = "huang";
$pwd = "123456";
3. Führen Sie
aus
$stms->execute();
[4. Führen Sie einen weiteren Datensatz in der Bindung
aus
$name = "er";
$pwd = "666666";
$stms->execute();
]
5. Schließen Sie
$stmt->close();
$mysqli->close();
(Weitere nützliche Parameter)
$num = $stmt->affected_rows; Anzahl der betroffenen Zeilen
$id = $stmt->insert_id; Wenn es sich um einen Einfügebefehl handelt, wird die eingefügte Zeilen-ID zurückgegeben (automatisch).
事务处理
在默认情况下,MYSQL是以自动提交(autocommit)模式运行,这就意味着所执行的每一个语句都将立即写入数据库中,但如果使用事务安全的表格类型,是不希望自动提交的行为的
事务处理
当执行多条MYSQL命令时,当然希望当其中一条命令出错时,所有的命令都不执行,返回执行命令之前的状态
这就用到事务了
简单运用事务流程
1.写好SQL命令
$sql1 = "insert user(name) values('huang','123456')";
$sql2 = "update account set number = number+1";
2.关闭MYSQL事务处理的自动提交模式
$mysqli->cutocommit(0);
3.试执行命令
$success = true;
$res1 = $mysqli->query($sql1);
if(!$res1 or $mysqli->affected_rows !=1){
$success = false;
}
$res2 = $mysqli->query($sql2);
if(!$res2 or $mysqli->affected_rows !=1){
$success = false;
}
4.查看执行情况,都成功执行,有失败回滚初态
if($success ){
$mysqli->commit();
echo "执行成功";
}else{
$mysqli->rollback();
echo "执行失败";
}
5.恢复MYSQL事务处理的自动提交模式
$mysqli->cutocommit(1);
$mysqli->close();
mysql 目前只有InnDB和BDB两种数据包类型才支持事务
InnoDB最快
(创建InnDB类型表)
create table user( id int(10) not null auto_increment, name varchar(50) not null, pwd varchar(50) not null, primary key(id) )type=InnoDB