ホームページ >バックエンド開発 >PHPチュートリアル >php操作mysql
まず、mysqli と mysql について文句を言いましょう。私の ps は mysql 関連の機能をサポートしていません。笑、w3school のコードは を使用しています。古いバージョンの MySQL 関数については、MySQL シリーズの関数の使い方を 1 つずつ説明します。 。 。
php5 以降のバージョンでは、mysqli と PDO を使用することをお勧めします。私が最近発見した Web サイトがあります: http://www.runoob.com
Mysqli と PDO にはそれぞれ独自の利点があります。 PDO は 12 のデータベースに適用され、汎用的な書き込みメソッドですが、mysqli は mysql 専用です。どちらもオブジェクト指向であり、mysqli も API インターフェイスを改善しています。どちらもプリペアド ステートメントをサポートしています。これは SQL インジェクションを防ぐことができ、Web プロジェクトのセキュリティにとって非常に重要です。私は現在、mysql プロジェクトの開発に特化しているため、PDO を理解するだけで mysqli を使用します。 PDO については、上記の Web サイトを参照してください。
以下はmysqliの運用データベースについてです。
小さなディレクトリを作成します。
1. データベースに接続します
3. データベースを作成します
5. データを挿入します
データ
7. 前処理ステートメント
8. データの読み取り
9.where
10.order by
11.update
12.delete
13.ODBC
mysqli (オブジェクト指向)
<?php$servername = "127.0.0.1";$username = "root";$password = "";// 创建连接$conn = new mysqli($servername, $username, $password);// 检测连接if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);}echo "Connected successfully";?>
注意在以上面向对象的实例中 $connect_error 是在 PHP 5.2.9 和 5.3.0 中添加的。如果你需要兼容更早版本 请使用以下代码替换:// 检测连接if (mysqli_connect_error()) { die("Database connection failed: " . mysqli_connect_error());}mysqli(手続き型指向)
<?php$servername = "127.0.0.1";$username = "root";$password = "";// 创建连接$conn = mysqli_connect($servername, $username, $password);// 检测连接if (!$conn) { die("Connection failed: " . mysqli_connect_error());}echo "Connected successfully";?>接続を閉じる:
mysqli(オブジェクト指向)
$conn->close();mysqli(手続き型指向)
mysqli_close($conn);データベースの作成:
CREATE DATABASE ステートメントデータベースの作成に使用されます:
mysqli オブジェクト指向: ここで tdb0 が作成されました。
";// Create database$sql = "CREATE DATABASE tdb0";if ($conn->query($sql) === TRUE) { echo "Database created successfully";} else { echo "Error creating database: " . $conn->error;}$conn->close();?>
注意: 当你创建一个新的数据库时,你必须为 mysqli 对象指定三个参数 (servername, username 和 password)。Tip: 如果你使用其他端口(默认为3306),为数据库参数添加空字符串,如: new mysqli("localhost", "username", "password", "", port)
mysqli プロシージャ指向:
<?php$servername = "127.0.0.1";$username = "root";$password = "";// 创建连接$conn = mysqli_connect($servername, $username, $password);// 检测连接if (!$conn) { die("Connection failed: " . mysqli_connect_error());}// Create database$sql = "CREATE DATABASE tdb1";if (mysqli_query($conn, $sql)) { echo "Database created successfully";} else { echo "Error creating database: " . mysqli_error($conn);}mysqli_close($conn);?>
テーブルの作成:
CREATE TABLE ステートメントは、MySQL テーブルの作成に使用されます。
mysqli オブジェクト指向:
connect_error) { die("Connection failed: " . $conn->connect_error);}// sql to create table$sql = "CREATE TABLE MyGuests (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,firstname VARCHAR(30) NOT NULL,lastname VARCHAR(30) NOT NULL,email VARCHAR(50),reg_date TIMESTAMP)";if ($conn->query($sql) === TRUE) { echo "Table MyGuests created successfully";} else { echo "Error creating table: " . $conn->error;}$conn->close();?>
mysqli プロセス指向:
<?php$servername = "127.0.0.1";$username = "root";$password = "";$dbname="jiu151231";// 创建连接$conn = mysqli_connect($servername, $username, $password, $dbname);// 检测连接if (!$conn) { die("Connection failed: " . mysqli_connect_error());}// sql to create table$sql = "CREATE TABLE MyGuests (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,firstname VARCHAR(30) NOT NULL,lastname VARCHAR(30) NOT NULL,email VARCHAR(50),reg_date TIMESTAMP)";if (mysqli_query($conn, $sql)) { echo "Table MyGuests created successfully";} else { echo "Error creating table: " . mysqli_error($conn);}mysqli_close($conn);?>
上記の表に関する注:
データ型は、列に格納できるデータの型を指定します。完全なデータ型については、データ型リファレンス マニュアルを参照してください。
データ型を設定した後、各列の他のオプションのプロパティを指定できます:
DEFAULT 値 - デフォルト値を設定します
UNSIGNED - 符号なしの数値タイプ、0 および正の数を使用します
PHPのSQLクエリステートメントでは引用符を使用する必要があります
SQLクエリステートメントの文字列値は引用符で囲む必要があります
数値には引用符を必要としません
INSERT INTO table_name (column1, column2, column3,...)VALUES (value1, value2, value3,...)
注意: 如果列设置 AUTO_INCREMENT (如 "id" 列) 或 TIMESTAMP (如 "reg_date" 列),,我们就不需要在 SQL 查询语句中指定值; MySQL 会自动为该列添加值。
connect_error) { die("Connection failed: " . $conn->connect_error);}$sql = "INSERT INTO MyGuests (firstname, lastname, email)VALUES ('John', 'Doe', 'john@example.com')";if ($conn->query($sql) === TRUE) { echo "New record created successfully";} else { echo "Error: " . $sql . "
" . $conn->error;}$conn->close();?>
<?php$servername = "127.0.0.1";$username = "root";$password = "";$dbname="jiu151231";// 创建连接$conn = mysqli_connect($servername, $username, $password, $dbname);// 检测连接if (!$conn) { die("Connection failed: " . mysqli_connect_error());}$sql = "INSERT INTO MyGuests (firstname, lastname, email)VALUES ('John', 'Doe', 'john@example.com')";if (mysqli_query($conn, $sql)) { echo "New record created successfully";} else { echo "Error: " . $sql . "<br>" . mysqli_error($conn);}mysqli_close($conn);?>
複数のステートメントを挿入:
mysqli _マルチクエリ() 関数は複数の SQL ステートメントを実行するために使用できます。
mysqli オブジェクト指向:
connect_error) { die("Connection failed: " . $conn->connect_error);}$sql = "INSERT INTO MyGuests (firstname, lastname, email)VALUES ('John', 'Doe', 'john@example.com');";$sql .= "INSERT INTO MyGuests (firstname, lastname, email)VALUES ('Mary', 'Moe', 'mary@example.com');";$sql .= "INSERT INTO MyGuests (firstname, lastname, email)VALUES ('Julie', 'Dooley', 'julie@example.com')";if ($conn->multi_query($sql) === TRUE) { echo "New records created successfully";} else { echo "Error: " . $sql . "
" . $conn->error;}$conn->close();?>
mysqli プロセス指向:
<?php$servername = "127.0.0.1";$username = "root";$password = "";$dbname="jiu151231";// 创建链接$conn = mysqli_connect($servername, $username, $password, $dbname);// 检查链接if (!$conn) { die("Connection failed: " . mysqli_connect_error());}$sql = "INSERT INTO MyGuests (firstname, lastname, email)VALUES ('John', 'Doe', 'john@example.com');";$sql .= "INSERT INTO MyGuests (firstname, lastname, email)VALUES ('Mary', 'Moe', 'mary@example.com');";$sql .= "INSERT INTO MyGuests (firstname, lastname, email)VALUES ('Julie', 'Dooley', 'julie@example.com')";if (mysqli_multi_query($conn, $sql)) { echo "New records created successfully";} else { echo "Error: " . $sql . "<br>" . mysqli_error($conn);}mysqli_close($conn);?>
プリペアド ステートメントとバインド パラメーター
プリペアド ステートメントは、複数の同一の SQL ステートメントをより高い実行効率で実行するために使用されます。
前処理されたステートメントは次のように機能します:
SQL ステートメント テンプレートでのデータベースの解析、コンパイル、クエリの最適化、および出力なしの結果の保存
実行: 最後に、 application パラメータ (「?」マーク) に値が渡され、データベースがステートメントを実行します。パラメータ値が異なる場合、アプリケーションはステートメントを複数回実行できます。
準備されたステートメントは、パラメーター値が送信された後に異なるプロトコルが使用され、データの正当性が保証されるため、SQL インジェクションに非常に役立ちます。
<?php$servername = "127.0.0.1";$username = "root";$password = "";$dbname="jiu151231";// Create connection$conn = new mysqli($servername, $username, $password, $dbname);// Check connectionif ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);} else { $sql = "INSERT INTO MyGuests VALUES(?, ?, ?)"; // 为 mysqli_stmt_prepare() 初始化 statement 对象 $stmt = mysqli_stmt_init($conn); //预处理语句 if (mysqli_stmt_prepare($stmt, $sql)) { // 绑定参数 mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email); // 设置参数并执行 $firstname = 'John'; $lastname = 'Doe'; $email = 'john@example.com'; mysqli_stmt_execute($stmt); $firstname = 'Mary'; $lastname = 'Moe'; $email = 'mary@example.com'; mysqli_stmt_execute($stmt); $firstname = 'Julie'; $lastname = 'Dooley'; $email = 'julie@example.com'; mysqli_stmt_execute($stmt); }}?>
connect_error) { die("Connection failed: " . $conn->connect_error);}// prepare and bind$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");$stmt->bind_param("sss", $firstname, $lastname, $email);// 设置参数并执行$firstname = "John";$lastname = "Doe";$email = "john@example.com";$stmt->execute();$firstname = "Mary";$lastname = "Moe";$email = "mary@example.com";$stmt->execute();$firstname = "Julie";$lastname = "Dooley";$email = "julie@example.com";$stmt->execute();echo "New records created successfully";$stmt->close();$conn->close();?>
该函数绑定参数查询并将参数传递给数据库。第二个参数是 "sss" 。以下列表展示了参数的类型。 s 字符告诉 mysql 参数是字符串。
This argument may be one of four types:
每个参数必须指定类型,来保证数据的安全性。通过类型的判断可以减少SQL注入漏洞带来的风险。
SELECT 语句用于从数据表中读取数据:
SELECT column_name(s) FROM table_name
mysqli面向对象:
connect_error) { die("Connection failed: " . $conn->connect_error);}$sql = "SELECT id, firstname, lastname FROM MyGuests";$result = $conn->query($sql);if ($result->num_rows > 0) { // 输出每行数据 while($row = $result->fetch_assoc()) { echo "
id: ". $row["id"]. " - Name: ". $row["firstname"]. " " . $row["lastname"]; }} else { echo "0 results";}$conn->close();?>
where子句
WHERE 子句用于提取满足指定标准的的记录。
SELECT column_name(s)FROM table_nameWHERE column_name operator value
<?php$con=mysqli_connect("example.com","peter","abc123","my_db");// Check connectionif (mysqli_connect_errno()){echo "Failed to connect to MySQL: " . mysqli_connect_error();}$result = mysqli_query($con,"SELECT * FROM PersonsWHERE FirstName='Peter'");while($row = mysqli_fetch_array($result)){echo $row['FirstName'] . " " . $row['LastName'];echo "<br>";}?>
ORDER BY 关键词用于对记录集中的数据进行排序。
ORDER BY 关键词默认对记录进行升序排序。默认为ASC。
如果你想降序排序,请使用 DESC 关键字。
SELECT column_name(s)FROM table_nameORDER BY column_name(s) ASC|DESC
<?php$con=mysqli_connect("example.com","peter","abc123","my_db");// Check connectionif (mysqli_connect_errno()){echo "Failed to connect to MySQL: " . mysqli_connect_error();}$result = mysqli_query($con,"SELECT * FROM Persons ORDER BY age");while($row = mysqli_fetch_array($result)){echo $row['FirstName'];echo " " . $row['LastName'];echo " " . $row['Age'];echo "<br>";}mysqli_close($con);?>
可以根据多个列进行排序。当按照多个列进行排序时,只有第一列的值相同时才使用第二列:
SELECT column_name(s)FROM table_nameORDER BY column1, column2
UPDATE 语句用于更新数据库表中已存在的记录。
UPDATE table_nameSET column1=value, column2=value2,...WHERE some_column=some_value
注释:请注意 UPDATE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要更新。如果您想省去 WHERE 子句,所有的记录都会被更新!
<?php$con=mysqli_connect("example.com","peter","abc123","my_db");// Check connectionif (mysqli_connect_errno()){echo "Failed to connect to MySQL: " . mysqli_connect_error();}mysqli_query($con,"UPDATE Persons SET Age=36WHERE FirstName='Peter' AND LastName='Griffin'");mysqli_close($con);?>
DELETE FROM 语句用于从数据库表中删除记录。
DELETE FROM table_nameWHERE some_column = some_value
注释:请注意 DELETE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要删除。如果您想省去 WHERE 子句,所有的记录都会被删除!
<?php$con=mysqli_connect("example.com","peter","abc123","my_db");// Check connectionif (mysqli_connect_errno()){echo "Failed to connect to MySQL: " . mysqli_connect_error();}mysqli_query($con,"DELETE FROM Persons WHERE LastName='Griffin'");mysqli_close($con);?>
ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数据库)。
通过一个 ODBC 连接,您可以连接到您的网络中的任何计算机上的任何数据库,只要 ODBC 连接是可用的。
这是创建到达 MS Access 数据库的 ODBC 连接的方法:
请注意,必须在您的网站所在的计算机上完成这个配置。如果您的计算机上正在运行 Internet 信息服务(IIS),上面的指令将会生效,但是如果您的网站位于远程服务器,您必须拥有对该服务器的物理访问权限,或者请您的主机提供商为您建立 DSN。
odbc_connect() 函数用于连接到 ODBC 数据源。该函数有四个参数:数据源名、用户名、密码以及可选的指针类型。
odbc_exec() 函数用于执行 SQL 语句。
下面的实例创建了到达名为 northwind 的 DSN 的连接,没有用户名和密码。然后创建并执行一条 SQL 语句:
$conn=odbc_connect('northwind','','');$sql="SELECT * FROM customers";$rs=odbc_exec($conn,$sql);
odbc_fetch_row() 函数用于从结果集中返回记录。如果能够返回行,则函数返回 true,否则返回 false。
该函数有两个参数:ODBC 结果标识符和可选的行号:
odbc_fetch_row($rs)
odbc_result() 函数用于从记录中读取字段。该函数有两个参数:ODBC 结果标识符和字段编号或名称。
下面的代码行从记录中返回第一个字段的值:
$compname=odbc_result($rs,1);
下面的代码行返回名为 "CompanyName" 的字段的值:
$compname=odbc_result($rs,"CompanyName");
odbc_close() 函数用于关闭 ODBC 连接。
odbc_close($conn);
下面的实例展示了如何首先创建一个数据库连接,接着创建一个结果集,然后在 HTML 表格中显示数据。
<html><body><?php$conn=odbc_connect('northwind','','');if (!$conn){exit("Connection Failed: " . $conn);}$sql="SELECT * FROM customers";$rs=odbc_exec($conn,$sql);if (!$rs){exit("Error in SQL");}echo "<table><tr>";echo "<th>Companyname</th>";echo "<th>Contactname</th></tr>";while (odbc_fetch_row($rs)){$compname=odbc_result($rs,"CompanyName");$conname=odbc_result($rs,"ContactName");echo "<tr><td>$compname</td>";echo "<td>$conname</td></tr>";}odbc_close($conn);echo "</table>";?></body></html>