zoukankan      html  css  js  c++  java
  • PHP中MySQL的使用

    连接到MySQL

        mysql_connect():

        $dbc=mysql_connect($host,$user,$password);

    选择当前数据库:

        mysql_select_db($database_name);

        mysql_select_db('$database_name',$conn);

      

    eg:

         

    <body>
    <?php
    DEFINE('DB_USER','root');
    DEFINE('DB_PWD','mysql');
    DEFINE('DB_HOST','localhost');
    DEFINE('DB_NAME','content');

    $dbc=@mysql_connect(DB_HOST,DB_USER,DB_PWD) OR die ('Could not connect to MySQL:'.mysql_error());
    @
    mysql_select_db(DB_NAME) or die ('Could not select the database:'.mysql_error());
    ?>
    </body>

      

     

     如果函数不能返回有效的资源链接,则会执行 or die(), die()函数会终止脚本的执行。

     

     

    执行简单的查询:

            

    $result=mysql_query($query);

      

                 对于像insertupdatedelete等简单的查询,它们不会返回记录,$result变量将会返回truefalse,这取决于查询是否执行成功。对于确实会返回记录的复杂查询(selectshowdescribeexplain),如果查询有效,则$result变量将是一个指向查询结果的资源链接;如果查询无效,则$result变量将为false

                

            

     1 <body>
    2 <?php
    3 $page_title='Register';
    4 include('Noname1.php');
    5 if(!empty($_POST['submit']))
    6 {
    7 $errors=array();
    8 }
    9 if(empty($_POST['name']))
    10 {
    11 $errors[]='You forgot to enter your name.';
    12 }
    13 else
    14 {
    15 $name=$_POST['name'];
    16 }
    17
    18 if(empty($_POST['email']))
    19 {
    20 $errors[]='You hava fotgot to enter your email';
    21 }
    22 else
    23 {
    24 $email=$_POST['email'];
    25 }
    26
    27 if(!isset($_POST['gender']))
    28 {
    29 $errors[]='You hava forgot to enter your gender';
    30 }
    31 else
    32 {
    33 $gender=$_POST['gender'];
    34 }
    35
    36 /*if(!empty($POST['comments']))
    37 {
    38 $comments=$_POST['comments'];
    39 }
    40 else
    41 {
    42 $errors[]='You hava forgot to set the comments';
    43 }*/
    44 if(empty($errors))
    45 {
    46 require_once('connectdb.php');
    47 $query="insert into urls(url,title,description) values('$name','$email','$gender')";
    48 $result=@mysql_query($query);
    49 if($result)
    50 {
    51 echo '<h1> Thank you!</h1>';
    52 }
    53 else
    54 {
    55 echo 'System error'.mysql_error();
    56 }
    57 }
    58 else
    59 {
    60 echo '<h1 id="mainhead">Error!</h1>';
    61 foreach($errors as $msg)
    62 {
    63 echo "-$msg<br>\n";
    64 }
    65 echo 'Please try again!';
    66 }
    67 ?>
    68 </body>

      

      

     

     

         关闭现有的MySQL链接:

            mysql_close();                     //php会在脚本的末尾自动关闭连接,所以这不是必须的。

     

     

                                                                 检索查询结果

     

    格式:

    mysql_fetch_row(result);


    说明:mysql_fetch_row用来查询结果的一行保存至数组,该数组下标从0开始,每一个数组元素对应

    一个域。通过循环,可以将查询结果全部获得。

    格式:

    1 mysql_fetch_array(result);

      

    说明:mysql_fetch_arraymysql_fetch_row功能基本相同,只不过它除了可以用从0开始的偏移量作

    索引,还可以用域名作索引。

    值返回下一行的所有域值,并将其保存至一个数组中,没有行时返回false。

     

     

    mysql_query("set name 'GBK'")  

      

                 //使用GBK中文编码

     

            处理select查询结果的主要工具是mysql_fetch_array(),它带有一个查询结果变量($result,并以数组格式一次返回一行数据

           从查询读取每条记录:

                

      while($row=mysql_fetch_array($result))
    {
    .........
    }

      

    mysql_fetch_array()函数还带有一个可选项,用于指定返回的数组的类型:联合数组、索引数组,或则两者。联合数组允许通过名称引用列值,而索引数组则要求只使用数字,他们如下表:

     

    常量

    示例

    MYSQL_ASSOC

    $row['column']

    MYSQL_NUM

    $row[0]                              (速度稍快)

    MYSQL_BOTH

    $row[0]$row['column']    (默认)

     

     

          释放查询信息:

            

       mysql_free_result($result);

      

               这一步不是必需的,因为PHP将在脚本末尾自动释放资源。

     

          eg:

          

     1 <?php
    2 require_once('connectdb.php');
    3 $query="select concat(url,',',title) as name ,url_id as id from urls";
    4 $result=@mysql_query($query);
    5 if($result)
    6 {
    7 echo '<table align="center" cellspacing="0" cellpadding="5">
    8 <tr><td align="left"><b>NAME</b></td><td align="left"><b>id</b></td>';
    9
    10 while($row=mysql_fetch_array($result,MYSQL_ASSOC))
    11 {
    12 echo '<tr><td align="left">'.$row['name'].'</td><td align="left">'.$row['id'].'</td></tr>';
    13 }
    14 echo '</table>';
    15 mysql_free_result($result);
    16 }
    17
    18 else
    19 {
    20 echo '<p>The current users could not be retrieved.We apologize for any inconvenience</p>';
    21 echo mysql_error();
    22 }
    23 mysql_close();
    24
    25 ?>

      

     

    运行结果为:

     

     

    技巧总结

     

    mysql_fetch_array()函数与mysql_fetch($result,MYSQL_NUM)函数等价

    mysql_fetch_assoc()函数与mysql_fetch_array($result,MYSQL_ASSOC)函数等价

    必需使用mysql_query()执行查询,然后使用mysql_fetch_array()来检索单行信息,如果要检索多行,则可使用while循环(而不要使用forforeach循环)


     

    确保SQL安全

     

    关于PHP的数据库安全可归纳为两大类问题:

     1.保护数据库访问信息

     2.在运行查询时要小心。

         使用特定的

    mysql_real_escape_string()

    函数,转义那些有可能有问题的字符来清理数据:

            $data=mysql_real_escape_string($data,$dbc);

         这个函数与addslashes()一样。它更特定于数据库。

        使用ini_get()函数测试Magic Quotes状态,这个函数将为特定的选项返回PHP的配置文件中的配置。如果ini_get() 函数返回true,就说明打开了Magic Quotes——则将在应用mysql_real_escape_string()之前,去除所有的斜杠。

          pHP的当前版本中,Magic Quotes默认是关闭的,因此ini_get()将返回FALSE,并且不需要去除任何现有的斜杠。

          如果Magic Quotes是开启的情况下,它会自动在需要转义的字符前加上“\,而我们向数据库中写入的时候这往往会引起错误,所以需要使用stripslashes($string)把那些\去掉。然后再调用mysql_real_escape_string()函数。

     

            eg

              

    1    function escape_data($data)
    2 {
    3 global $dbc;
    4 if(ini_get('magic_quotes_gpc'))
    5 {
    6 $data=stripslashes($data);
    7 }
    8 retrun mysql_real_escape_string(trim($data),$dbc);
    9 }

      

     

     

            技巧总结

     

     

    mysql_real_escape_String()函数一招所用的语言对字符串进行转义

    mysql_real_escape_string()函数需要一个数据库连接。

    get_magic_quotes_gpc()函数也可用于返回当前的Magic Quotes设置。

    ini_get()可用于获取许多不同的php.ini设置的内容,不只是Magic Quotes的设置。

     

     

     

      统计返回的记录

     

    mysql_num_rows(),返回select查询索引的行数,并取查询的结果作为一个参数。

     eg:

            $num=mysql_num_rows($result);

     

     

      其他常用Mysql函数介绍

     

    mysql_insert_id

     传回最后一次使用 INSERT 指令的 ID


    mysql_tablename

     取得数据库名称

  • 相关阅读:
    java基础(7)--方法
    java基础(6)--数组和方法
    java基础(5)--流程控制结构
    java基础(4)--运算符及表达式
    java基础(2)--进制
    Java基础(1)--JDK,变量
    quartz(8)--其他
    spring AOP 概述(三) Advisor
    spring AOP 概述(二) Pointcut
    spring AOP 概述(一) Advice
  • 原文地址:https://www.cnblogs.com/fanchangfa/p/2171237.html
Copyright © 2011-2022 走看看