php操作mysql
首先先吐槽下mysqli与mysql,前者是后者的改进版,我的ps不支持mysql相关函数,而且我看的是w3school上的教程,呵呵,w3school上的代码用的是旧版本的mysql函数,我去,让我一个个百mysqli系列函数的用法。。。
php5以上的版本,建议使用mysqli和PDO。有个网站,我刚发现的: http://www.runoob.com
mysqli和PDO各有各的优势。PDO应用于12中数据库,是一种通用的写法;而mysqli是专门针对mysql的。两者都是面向对象,而mysqli还提高了API接口。两者都支持预处理语句,预处理语句可以防止SQL注入,对于web项目的安全性是非常重要的。因为我现在专门开发mysql项目,故而就使用mysqli吧,PDO只了解即可。PDO的学习可以参考上面那个网址。
下面说mysqli操作数据库。
做个小目录:
1.连接数据库
2.关闭连接
3.创建数据库
4.创建表
5.插入数据
6.插入多条数据
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);?>
上表中的注意事项:
数据类型指定列可以存储什么类型的数据。完整的数据类型请参考我们的 数据类型参考手册。
在设置了数据类型后,你可以为每个列指定其他选项的属性:
- NOT NULL - 没一行都必须含有值(不能为空),null 值是不允许的。
- DEFAULT value - 设置默认值
- UNSIGNED - 使用无符号数值类型,0 及正数
- AUTO INCREMENT - 设置 MySQL 字段的值在新增记录时每次自动增长 1
- PRIMARY KEY - 设置数据表中每条记录的唯一标识。 通常列的 PRIMARY KEY 设置为 ID 数值,与 AUTO_INCREMENT 一起使用。
每个表都应该有一个主键(本列为 "id" 列),主键必须包含唯一的值。
插入数据:
以下为一些语法规则:
- PHP 中 SQL 查询语句必须使用引号
- 在 SQL 查询语句中的字符串值必须加引号
- 数值的值不需要引号
- NULL 值不需要引号
INSERT INTO 语句通常用于向 MySQL 表添加新的记录:
INSERT INTO table_name (column1, column2, column3,...)VALUES (value1, value2, value3,...)
注意: 如果列设置 AUTO_INCREMENT (如 "id" 列) 或 TIMESTAMP (如 "reg_date" 列),,我们就不需要在 SQL 查询语句中指定值; MySQL 会自动为该列添加值。
mysqli面向对象:
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();?>
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')";if (mysqli_query($conn, $sql)) { echo "New record created successfully";} else { echo "Error: " . $sql . "<br>" . mysqli_error($conn);}mysqli_close($conn);?>
插入多条语句:
mysqli_multi_query() 函数可用来执行多条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 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
- 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出
- 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
相比于直接执行SQL语句,预处理语句有两个主要优点:
- 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)
- 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句
- 预处理语句针对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();?>
我们可以看到以上实例中使用模块化来处理问题。我们可以通过创建代码块实现更简单的读取和管理。
注意参数的绑定。让我们看下 mysqli_stmt_bind_param() 中的代码:
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
该函数绑定参数查询并将参数传递给数据库。第二个参数是 "sss" 。以下列表展示了参数的类型。 s 字符告诉 mysql 参数是字符串。
This argument may be one of four types:
- i - integer
- d - double
- s - string
- b - BLOB
每个参数必须指定类型,来保证数据的安全性。通过类型的判断可以减少SQL注入漏洞带来的风险。
从 MySQL 数据库读取数据
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 关键词用于对记录集中的数据进行排序。
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 语句用于更新数据库表中已存在的记录。
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
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
ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数据库)。
创建 ODBC 连接
通过一个 ODBC 连接,您可以连接到您的网络中的任何计算机上的任何数据库,只要 ODBC 连接是可用的。
这是创建到达 MS Access 数据库的 ODBC 连接的方法:
- 在控制面板中打开 管理工具图标。
- 双击其中的 数据源(ODBC)图标。
- 选择 系统 DSN选项卡。
- 点击系统 DSN 选项卡中的 添加。
- 选择 Microsoft Access Driver。点击 完成。
- 在下一个界面,点击 选择来定位数据库。
- 为数据库起一个 数据源名(DSN)。
- 点击 确定。
请注意,必须在您的网站所在的计算机上完成这个配置。如果您的计算机上正在运行 Internet 信息服务(IIS),上面的指令将会生效,但是如果您的网站位于远程服务器,您必须拥有对该服务器的物理访问权限,或者请您的主机提供商为您建立 DSN。
连接到 ODBC
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 连接
odbc_close() 函数用于关闭 ODBC 连接。
odbc_close($conn);
ODBC 实例
下面的实例展示了如何首先创建一个数据库连接,接着创建一个结果集,然后在 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>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。
