PHP 编程/MySQL
MySQL 是与 PHP 一起使用的最流行的数据库。PHP 与 MySQL 的组合非常强大,展示了服务器端脚本的真正力量。PHP 在单独模块的帮助下提供了广泛的 MySQL 函数。在 PHP5 中,该模块已被移除,必须单独下载。
MySQL 允许用户创建表,数据可以在表中存储得比在数组中存储得更有效率。
为了有效地使用 MySQL 或数据库,您需要理解 SQL 或结构化查询语言。
请注意,此页面使用 mysqli 函数,而不是旧的 mysql 函数。
PHP 具有 mysqli_connect 函数来连接到处理所有低级套接字处理的 MySQL 服务器。我们将提供 4 个参数;第一个是您的 MySQL 服务器的名称,第二个是 MySQL 用户名,第三个是 MySQL 密码,最后一个是数据库名称。在本例中,假设您的服务器是 localhost。如果您在一个系统上运行 Web 服务器,而在另一个系统上运行 MySQL,则可以将 localhost 替换为 MySQL 所在系统的 IP 地址或域名(确保所有防火墙都配置为打开相应的端口)。mysqli_connect 返回一个 link_identifier,我们现在可以使用它与数据库进行通信。我们将此链接存储在一个名为 $cxn 的变量中。
<?php
$cxn = mysqli_connect ("localhost", "your_user_name", "your_password", "database_name");
?>
我们已连接到 mysql 服务器并选择了要使用的数据库,现在我们可以对数据库运行 SQL 查询来选择信息、进行插入、更新或删除。为此,我们使用 mysqli_query。它接受两个参数:第一个是我们的 link_identifier,第二个是 SQL 查询字符串。如果我们正在进行 select sql 语句,mysqli_query 会生成一个资源或布尔值 false 来表示我们的查询失败,如果我们正在进行 delete、insert 或 update,它会生成一个布尔值,true 或 false,来表示操作是否成功。
运行查询的基本代码是 php 函数“mysqli_query($cxn, $query)”。“$query”参数是一个 MySQL 查询。数据库参数是一个数据库连接(在这里,由 $cxn 表示的连接)。例如,要返回查询“SELECT * FROM customers ORDER BY customer_id ASC”,您可以编写
<?php
mysqli_query($cxn, "SELECT * FROM customers ORDER BY customer_id ASC");
?>
但是,这种直接方法很快就会变得笨拙,因为 MySQL 查询的长度和在处理返回值时重复查询的常见需求。因此,所有(或几乎所有)查询都分为两个步骤。首先,查询被分配给一个变量(按照惯例,此变量名为“$query”或“$sql_query”,以便统一性和易于识别),这使程序能够简单地调用“mysqli_query($cxn, $sql_query)”。
$sql_query = "SELECT * FROM customers ORDER BY customer_id ASC";
其次,为了处理从查询返回的信息,实际考虑因素要求将返回的信息也分配给一个变量。同样地,是出于惯例而不是必要性(也就是说,您可以将其命名为任何您想要的东西),此信息通常被分配给“$result”,并且该函数通过变量分配来调用。
重要的是要理解,此代码调用 mysqli_query 函数,除了将返回值分配给变量“$result”。[注意:请求信息的查询——SELECT、SHOW、DESCRIBE 和 EXPLAIN——返回称为资源的内容。其他类型的查询(操作数据库)在操作成功时返回 TRUE,失败或用户没有权限访问引用的表时返回 FALSE。]
为了捕获错误,出于调试目的,我们可以编写
<?php
$result = mysqli_query ($cxn, $sql_query)
or die (mysqli_error () . " The query was:" . $sql_query);
?>
注意:函数前的分号die 语句被省略了。
如果函数 mysqli_query 返回 false,PHP 将终止脚本并打印来自 MySQL 的错误报告(例如“您的 SQL 语法有错误”)以及查询。
因此,我们的最终代码将是,假设有一个名为 $cxn 的数据库连接
<?php
$sql_query = "SELECT * FROM customers ORDER BY customer_id ASC";
$result = mysqli_query ($cxn, $sql_query)
or die (mysqli_error () . " The query was:" . $sql_query);
?>
在前面的部分中,我们查看了三个命令,但没有看如何将它们结合在一起使用。所以让我们看看如何从名为 MyTable 的 mysql 数据库表中选择信息,该表存储在名为 MyDB 的 mysql 数据库中。
<?php
//Connect to the mysql server and get back our link_identifier
$link = mysql_connect ("your_database_host", "your_user_name", "your_password")
or die('Could not connect: ' . mysql_error());
//Now, we select which database we would like to use
mysql_select_db ("MyDB", $link) or die('could not select database');
//Our SQL Query
$sql_query = "Select * From MyTable";
//Run our sql query
$result = mysql_query($sql_query)or die('query failed'. mysql_error());
//Close Database Connection
mysql_close ($link);
?>
注意:如果未指定 link identifier,则假定为mysql_connect()最后打开的链接。
[由 [email protected] : 我们使用了 my_sqli 连接器,这是最新的结构。还有一些其他教程使用 my_sql 结构来建立数据库连接(不要与它混淆。我们的结构是最新版本)。创建数据库是我们在使用 php 脚本访问后端 MySql 服务器时执行的第一步。这可以通过连接到服务器来实现。之后,创建数据库。
<?php
$cn=mysqli_connect("localhost","your_username","my_password");
//connecting the server
if (mysqli_connect_errno())
{
echo "Error in establisihng the connection:" . mysqli_connect_error();
}
$sql_query="CREATE DATABASE MyDB";
if (mysqli_query($cn,$sql_query))
{
echo "Database has been created";
}
else
{
echo "Error while creating the database: ” . mysqli_error($cn);
}
?>
创建表的步骤与创建数据库一样简单。我们必须使用 mysqli 结构执行创建表查询
<?php
$cn=mysqli_connect("localhost","my_username","my_password","MyDatabase");
if (mysqli_connect_errno())
{
echo "Connection failed : " . mysqli_connect_error();
}
$sql_query="CREATE TABLE MyTable(firstName VARCHAR(18), lastName VARCHAR(18), salary DECIMAL(5,4) )";
if (mysqli_query($cn,$sql_query))
{
echo "Table created successfully";
}
else
{
echo "Error encountered while creating the table : " . mysqli_error($cn);
}
?>
这没有帮助,因为我们该如何处理$result呢?当我们执行选择查询时,我们从数据库中选择信息,然后获得一个称为资源的东西,它存储在$result中,我们的资源标识符。资源是一种特殊的PHP变量,但让我们看看如何访问此资源中的信息。
我们可以使用一个名为mysql_fetch_assoc的函数,它接受一个参数,我们的资源标识符$result,并生成一个与获取的行相对应的关联数组。表中的每一列都对应于具有相同名称的索引。现在我们可以提取信息并像这样打印出来
<?php
//Connect to the mysql server and get back our link_identifier
$link = mysql_connect("localhost", "your_user_name", "your_password")
or die('Could not connect: ' . mysql_error());
//Now, we select which database we would like to use
mysql_select_db("MyDB") or die('could not select database');
//Our SQL Query
$sql_query = "Select * From MyTable";
//Run our sql query
$result = mysql_query($sql_query)or die('query failed'. mysql_error());
//iterate through result
while($row = mysql_fetch_assoc($result))
{
//Prints out information of that row
print_r($row);
echo $row['foo'];
//Prints only the column foo.
}
// Free resultset (optional)
mysql_free_result($result);
//Close the MySQL Link
mysql_close($link);
?>
<?php
$cn=mysqli_connect("localhost","your_username","your_password","MyDB");
if (mysqli_connect_errno())
{
echo "Connection failed : " .
mysqli_connect_error();
}
mysqli_query($cn,"INSERT INTO MyTable(firstName, lastName, salary) VALUES ('George','Smith' ,55000)");
mysqli_close($cn);
?>
<?php
$cn=mysqli_connect("localhost","your_username","your_password","MyDB");
if (mysqli_connect_errno())
{
echo "Connection failed : " . mysqli_connect_error();
}
mysqli_query($cn,”Update MyTable Set salary=6000 Where firstName='George' AND lastName='Smith' ");
mysqli_close($cn);
?>
<?php
$cn=mysqli_connect("localhost","your_username","your_password","MyDB");
if (mysqli_connect_errno())
{
echo "Connection failed : " . mysqli_connect_error();
}
mysqli_query($cn,"Delete From MyTable Where firstName='George' AND lastName='Smith' “);
mysqli_close($cn);
?>
一旦您理解了MySQL与PHP交互的基本原理,您可能想开始学习全文本搜索引擎。当您的网站变得很大(数百万条数据库记录)时,MySQL查询将开始变得非常缓慢,尤其是在使用它们搜索包含通配符的文本时。
WHERE content='%text%')
有很多免费/付费的解决方案可以解决这个问题。一个好的开源全文本搜索引擎是Sphinx Search。有一个WikiBook介绍了如何将其与PHP和MySQL一起使用,它解释了索引的工作原理。您可能想在阅读官方文档之前先阅读它。