mysql笔记1

转自:http://www.phpchina.com/html/37/14637-3469.html
在 MySQL 控制台中输入以下内容:

create database workflow;

use workflow;

create table users (id int auto_increment primary key, username
varchar(50), email varchar(255), password varchar(50));

show tables;最后的结果看起来类似于:

+--------------------+
| Tables_in_workflow |
+--------------------+
|        users           |
+--------------------+
1 row in set (0.00 sec)最后添加新用户wfuser,口令为wfpass:

GRANT ALL PRIVILEGES ON *.* TO 'wfuser'@'localhost'
IDENTIFIED BY 'wfpass' WITH GRANT OPTION;然后我们来使用这个数据库。


连接 MySQL 第 2 页(共8 页)




如果不与某种形式的数据库交互,那么创建任何较大的 Web 应用程序基本上是不可能的。在这个示例应用程序中,我们将使用 MySQL 数据库保存用户名和口令信息。这一节将在注册页面中添加必要的功能,以检查提交的用户名是否惟一,如果是惟一的,则将其添加到表中。还可以查看已经显示在数据库中的信息。最终我们将创建应用程序登录页面。

首先要连接到数据库。PHP 有一些函数完全是用于处理 MySQL 数据库的,这一节中将用到它们。

第一步是创建一个函数,以连接到设置一节中创建的工作流数据库:

...
    return $message;

}function db_connect($user='wfuser',
                    $password='wfpass', $db='workflow'){

  mysql_connect('localhost', $user, $password)
       or die('I cannot connect to db: ' . mysql_error());}

    foreach ($_POST as $key=>$value) {
       echo "<p>".$key." = " . $value . "</p>";
    }

...
    if (validate($_POST) == "OK") {
        echo "<p>Thank you for registering!</p>";db_connect();} else {
        echo "<p>There was a problem with your registration:</p>";
...这里建立了一个函数db_connect(),该函数将尝试打开 PHP 和 MySQL 数据库之间的连接。要注意该函数的定义,其中包含了一些参数值。这些是默认值,也就是说,如果不提供用户名、口令和数据库名,那么 PHP 将使用这些值(实际上很快就要这样做。)

该函数尝试连接到本地机器localhost上的数据库。要注意的是,在这个例子中,“本地机器”指的是对 PHP 服务器而言的本地机器,因此,本地机器指的是 Web 服务器而不是客户机。

如果 PHP 打不开连接,那么处理将终止(或者死掉),PHP 只显示一条消息,说明遇到了什么情况。

假设一切正常,那么该连接将一直处于打开状态,直到您关闭它,或者完成该页面的处理。发出的其他所有数据库命令都被定向到该连接。

最后还需要调用该函数来执行这些操作。

选择数据库 第 3 页(共8 页)




一个 MySQL 数据库服务器可能有多个数据库,因此打开到服务器的连接之后,还需要指定连接的数据库:

...
function db_connect($user='wfuser',
                    $password='wfpass', $db='workflow'){

  mysql_connect('localhost', $user, $password)
       or die('I cannot connect to db: ' . mysql_error());
  mysql_select_db($db);

}
...现在,这个函数可以用于连接本地服务器上的任何 MySQL 数据库。实际上,该函数的一大优点就是这一点,从某种意义上说,这个优点是与数据库无关的。您不仅可以改变数据库的名称,还可以更改将要访问的数据库类型,而且所有修改都在这个函数中完成。

现在可以准备插入用户数据了。

插入记录 第 4 页(共8 页)




现在可以向前面创建的用户表中添加数据了。为此需要创建一个向该表插入数据的 SQL 语句,然后执行该语句。

该语句的形式如下:

insert into users (username, email, password) values
('roadnick', '[email protected]', 'supersecretpassword')如果在创建表时特别注意,您可能会奇怪id列是干什么的。可以指定第一列为AUTO_INCREMENT,因此如果不去考虑它(正像我们这里所做的那样),那么 MySQL 将自动向其中填入下一个可用的整数。因此,您在这里必须做的事情是,使用用户提交的数据替换占位符,并执行以下语句:

...
    if (validate($_POST) == "OK") {
        echo "<p>Thank you for registering!</p>";

        db_connect();$sql = "insert into users (username, email, password) values
('".$_POST["name"]."', '".$_POST["email"]."', '".$passwords[0]."')";
        $result = mysql_query($sql);

        if ($result){
            echo "It's entered!";
        } else {
            echo "There's been a problem: ".mysql_error();
        }} else {
        echo "<p>There was a problem with your registration:</p>";
...注意,调用mysql_query()函数时返回的值保存在$result变量中。如果操作成功,则该值将是 true,如果出现问题,则为 false。然后可以使用该值作为 if-then 语句的表达式,根据结果执行不同的操作。

如果出现问题,MySQL 将为mysql_error()函数设置一个返回值,然后可以将这个值输出到页面。

现在已经在数据库中添加了信息,下一步则是查看存储的信息。

选择记录 第 5 页(共8 页)




现在可以向数据库中添加数据了,但是如何知道用户名是否惟一呢?目前还不知道,但是可以通过在执行插入之前检查用户表来加以补救:

...
  if (validate($_POST) == "OK") {
      echo "<p>Thank you for registering!</p>";

      db_connect();$sql = "select * from users where username='".$_POST["name"]."'";
      $result = mysql_query($sql);
      if (!$result) {$sql = "insert into users (username, email, password) values
  ('".$_POST["name"]."', '".$_POST["email"]."', '".$passwords[0]."')";
         $result = mysql_query($sql);

         if ($result){
             echo "It's entered!";
         } else {
             echo "There's been a problem: ".mysql_error();
         }} else {

         echo "There is already a user with that name: <br />";
         $sqlAll = "select * from users";
         $resultsAll = mysql_query($sqlAll);

      }} else {
      echo "<p>There was a problem with your registration:</p>";
...首先创建一个 SQL 语句,该语句将选出拥有与打算插入的用户名匹配的用户名的所有记录。与插入语句一样,也可以对数据库执行该语句。如果该语句返回的结果不为空,则mysql_query()返回一个结果为 true 的值,否则返回 false。

现在我们不希望存在这样的用户名,因此希望$result的值为 false。但如果使用的是 if-then 语句的话,那么希望获得的将是true语句,而不是 false 语句。因此要使用取反运算符,即叹号,其含义为“如果该值的反是 true,则应该做什么”,在这里,所谓做什么是指将数据插入数据库。

但是,如果$result为 true,那么该怎么做呢?如果$result的反是 false,则执行 else 语句。最后我们将列出已有的用户名和邮件地址,因此,首先要创建并执行这样的 SQL 语句。

然后是检索结果。

检索结果 第 6 页(共8 页)




当然,在现实中,如果输入了已经存在的用户名,则绝对不需要显示已有的用户名,不过,在这里这样做是为了说明如何完成这类工作。

上一节中创建了一个 SQL 语句,以便从用户表中选择所有记录,并把结果存放在$resultsAll变量中。现在要从该变量中检索数据:

...
        } else {

           echo "There is already a user with that name: <br />";
           $sqlAll = "select * from users";
           $resultsAll = mysql_query($sqlAll);$row = mysql_fetch_array($resultsAll);

           echo $row["username"]." -- ".$row["email"]."<br />";}
...检索数据的第一步是从$resultsAll中取出一行,它实际上是表示整个数据集的资源。mysql_fetch_array()函数正如其名称所指示的那样,返回包含某一行中数据的关联数组。键和列名相同,因此,通过从$row数组中请求适当的值,很容易输出这一行中的数据。

不过该例中只有一行,如何访问所有数据呢?

查看所有的结果:while循环

如果在第一次检索中,至少有一行可供检索,那么在 if-then 语句(或者后面使用的 while 语句)中,$row将显示为 true。当 PHP 遇到while($row) 语句时,它会说,“哦,该表达式的值是 true,那么执行这一段代码吧。”于是输出这一行数据,然后再提取另一行,又回到循环的顶端。

...
        } else {

           echo "There is already a user with that name: <br />";
           $sqlAll = "select * from users";
           $resultsAll = mysql_query($sqlAll);
           $row = mysql_fetch_array($resultsAll);while ($row) {echo $row["username"]." -- ".$row["email"]."<br />";$row = mysql_fetch_array($result);}
        }
...如果检索另一行成功,那么$row将再次为 true,循环再次执行。如此反复,直到没有剩余的行为止,mysql_fetch_array()返回 false。现在,PHP 知道要跳出循环执行脚本中剩下的语句。

顺便说一下:如果忘掉最后一步,即检索另一行,那么$row将一直为 true,服务器不停地运行该循环,直到内存溢出或者超时为止。因此,创建这类循环时,首先应该添加的语句就是递增要遍历的对象。


关闭数据库连接

继续下一步之前,一定要关闭打开的数据库连接:

...
    if (validate($_POST) == "OK") {
        echo "<p>Thank you for registering!</p>";

        db_connect();

        $sql = "select * from users where username='".$_POST["name"]."'";
        $result = mysql_query($sql);
        if (!$result) {
...
        }mysql_close();} else {
...现在需要把事情理一理了。




整理:


1.连接 MySQL
mysql_connect('localhost'(数据库服务器), 服务器进程所有者的用户名, 密码)
       or die('I cannot connect to db: ' . mysql_error());

2.指定数据库
   mysql_select_db(数据库名:string);

3. 查询数据库:
   mysql_query(sql语句:string);
  发送一条 MySQL 查询;
   $result=mysql_query("select * from tableName")      
   $result  布尔类型。sql语句正确则返回true,or to false;

4.mysql_fetch_array :从结果集中取得一行作为关联数组,或数字数组,或二者兼有
  与mysql_query连用,返回数组类型;
  mysql_fetch_arry(mysql_query(),MYSQL_ASSOC || MYSQL_NUM ||MYSQL_BOTH);







附加数据库操作知识:
1.在一个表中添加新列:
alter table 表名
add  列名   数据类型;

2.修改一个表的一列名:
alter table 表名
change 原列名 新列名 新列的数据类型;

3.修改一列的数据类型:
alter table 表名
modify 列名  新的数据类型;

4.修改某一单元格的内容:
update 表名
set 单元格所在的列名=相应的值
where 条件语句;

mySql每一列都有自己的数据类型,当使用php连接mysql插入的数据的数据类型不匹配时,浏览器不报错,数据也没有插入成功。所以注意数据库的安全性与完整性。

你可能感兴趣的:(sql,PHP,应用服务器,mysql,workflow)