讨论mysql和mysqli两种连接数据库方式
来源:互联网 发布:淘宝圈椅三件套 编辑:程序博客网 时间:2024/05/23 19:30
mysql方式连接数据库案例
<?php//指定网页头编码为utf-8header ( "Content-type:text/html;charset=utf-8" ); //网页统一输出编码为utf-8 echo "<title>demo - mysql方式连接</title>"; //指定网页标题$servername = 'localhost';$username = 'root';$password = '';$dbname = "classplatform";// 创建连接,如果成功,则返回一个 MySQL 连接标识,失败则返回 FALSE。$conn=mysql_connect($servername, $username, $password) or die('连接失败');mysql_select_db($dbname);//设置数据库数据以utf-8编码返回,mysql_query('set names utf8'); //建立查询语句 $sql = "SELECTt_software.num,t_software.swname,t_software.description,t_cat.cat,t_software.secretkey,t_software.baidusecretlink,t_software.created,t_software.lastmodifiedFROMt_softwareINNER JOIN t_cat ON t_software.category = t_cat.num";$result = mysql_query($sql); if ($result) {echo "<p><strong>共获取到 ".mysql_num_rows($result)." 条记录 :</strong></p>"; // 输出数据echo "<table>";echo "<tr><th>num</th><th>swname</th><th>description</th><th>cat</th><th>secretkey</th><th>baidusecretlink</th><th>created</th><th>lastmodified</th></tr>";/* 方式1: $row=mysql_fetch_row($result) 方式2: $row=mysql_fetch_array($result) 这4种写法都可以用来获取一行数据,方式1返回的数组是只包含值,我们只能$row[0], $row[1],这样以数组下标来读取数据,而方式2返回的数组既包含第一种,也包含键值对的形式,我们可以这样读取数据, 假如数据库的字段是 username,passwd): $row['username'], $row['passwd'] 如果用($row as $kay => $value)来操作的话,还以直接取得数据库的字段名称。 */ while($row=mysql_fetch_array($result) ) { echo "<tr><td>{$row['num']}</td><td>{$row['swname']}</td><td>{$row['description']}</td><td>{$row['cat']}</td><td>{$row['secretkey']}</td><td>{$row['baidusecretlink']}</td><td>{$row['created']}</td><td>{$row['lastmodified']}</td></tr>"; // echo "<tr><td>{$row[0]}</td><td>{$row[1]}</td><td>{$row[2]}</td><td>{$row[3]}</td><td>{$row[4]}</td><td>{$row[5]}</td><td>{$row[6]}</td><td>{$row[7]}</td></tr>"; }echo "</table>";} else { echo "0 结果";}//只能使用这一种关闭连接的方式mysql_close ( $conn );?>
mysqli方式连接数据库案例
<?phpheader ( "Content-type:text/html;charset=utf-8" ); //网页统一输出编码为utf-8 echo "<title>demo - mysqli方式连接</title>";//指定网页标题$servername = 'localhost';$username = 'root';$password = '';$dbname = "classplatform";// 创建连接,返回一个代表到 MySQL 服务器的连接的对象$conn = mysqli_connect($servername, $username, $password, $dbname);// 检测连接if (!$conn) { die("Connection failed: " . mysqli_connect_error());}//设置数据库数据以utf-8编码返回,mysqli_query($conn,'set names utf8');//建立查询语句$sql = "SELECTt_software.num,t_software.swname,t_software.description,t_cat.cat,t_software.secretkey,t_software.baidusecretlink,t_software.created,t_software.lastmodifiedFROMt_softwareINNER JOIN t_cat ON t_software.category = t_cat.num";//执行查询方式1$result = $conn->query($sql);//执行查询方式2// $result = mysqli_query ( $conn, $query ); // 输出数据if ($result->num_rows > 0) {echo "<p><strong>共获取到 ".$result->num_rows." 条记录 :</strong></p>"; echo "<table>";echo "<tr><th>num</th><th>swname</th><th>description</th><th>cat</th><th>secretkey</th><th>baidusecretlink</th><th>created</th><th>lastmodified</th></tr>";/*方式1:$row=mysqli_fetch_row($result) 方式2:$row=$result->fetch_row()方式3:$row=mysqli_fetch_array($result) 方式4:$row = $result->fetch_assoc()这4种写法都可以用来获取一行数据,前两种方式返回的数组是只包含值,我们只能$row[0], $row[1],这样以数组下标来读取数据,而后两种方式返回的数组既包含第一种,也包含键值对的形式,我们可以这样读取数据,假如数据库的字段是 username,passwd): $row['username'], $row['passwd'] 如果用($row as $kay => $value)来操作的话,还以直接取得数据库的字段名称。 */ while($row=$result->fetch_assoc()) {echo "<tr><td>{$row['num']}</td><td>{$row['swname']}</td><td>{$row['description']}</td><td>{$row['cat']}</td><td>{$row['secretkey']}</td><td>{$row['baidusecretlink']}</td><td>{$row['created']}</td><td>{$row['lastmodified']}</td></tr>";// echo "<tr><td>{$row[0]}</td><td>{$row[1]}</td><td>{$row[2]}</td><td>{$row[3]}</td><td>{$row[4]}</td><td>{$row[5]}</td><td>{$row[6]}</td><td>{$row[7]}</td></tr>"; }echo "</table>";} else { echo "0 结果";}//关闭连接方式1$conn->close();//关闭连接方式2// mysqli_close ( $conn ); ?>
注意:
mysqli_query($con,'set names utf8');
mysql_query("SET NAMES 'utf8'");
mysql_query的参数只有一个,mysqli的需要两个,否则报错。
PHP-MySQL是PHP操作MySQL资料库最原始的Extension,PHP-MySQLi的i代表Improvement,提更了相对进阶的功能,就 Extension 而言,本身也增加了安全性。而PDO (PHP Data Object)则是提供了一个Abstraction Layer 来操作资料库。
先来看一段用 PHP-MySQL写成的程序:
<?php mysql_connect($db_host, $db_user, $db_password); mysql_select_db($dn_name); $result = mysql_query("SELECT `name` FROM `users` WHERE `location` = '$location'"); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo $row['name']; } mysql_free_result($result); ?>
这种方式不能BindColumn,以前例的SQL叙述来说,$location的地方容易被 SQL Injection。后来于是发展出了mysql_escape_string()(备注:5.3.0之后弃用)以及mysql_real_escape_string()来解决这个问题,这么一搞,整个叙述会变得复杂且丑陋,而且如果栏位多了,可以想见会是怎样的情形…
<?php mysql_connect($db_host, $db_user, $db_password); mysql_select_db($dn_name); $result = mysql_query("SELECT `name` FROM `users` WHERE `location` = '$location'"); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo $row['name']; } mysql_free_result($result); ?>
在 PHP-MySQLi 中有了不少进步,除了透过Bind Column来解决上述问题,而且支持 Transaction, Multi Query,并且同时提供了 Object oriented style (下面这段 PHP-MySQLi 范例的写法)和 Procedural style (上面 PHP-MySQL范例的写法)两种写法。
<?php $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name); $sql = "INSERT INTO `users` (id, name, gender, location) VALUES (?, ?, ?, ?)"; $stmt = $mysqli->prepare($sql); $stmt->bind_param('dsss', $source_id, $source_name, $source_gender, $source_location); $stmt->execute(); $stmt->bind_result($id, $name, $gender, $location); while ($stmt->fetch()) { echo $id . $name . $gender . $location; } $stmt->close(); $mysqli->close(); ?>
mysql是非持继连接函数,而mysqli是永远连接函数。也就是说mysql每次链接都会打开一个连接的进程而mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销
有些朋友。在编程的时候,使用
new mysqli('localhost', usenamer', 'password', 'databasename');
总是报错,Fatal error: Class 'mysqli' not found in d:\...
mysqli类不是php自带的吗? 不是默认开启的,win下要改php.ini,去掉php_mysqli.dll前的;linux下要把mysqli编译进去。 Mysqli.dll是一个允许以对象的方式或者过程操作数据库的,它的使用方式也很容易。这里就几个常见的操作和mysql.dll做一个对比。
1. mysql.dll(可以理解为函数式的方式)
$conn = mysql_connect('localhost', 'user', 'password'); //连接mysql数据库 mysql_select_db('data_base'); //选择数据库 $result = mysql_query('select * from data_base');//这里有第二个可选参数,指定打开的连接 $row = mysql_fetch_row( $result ) ) ;/为了简单,这里只取一行数据 echo $row[0]; //输出第一个字段的值
mysqli也有过程式的方式,只不过开始贯以mysqli的前缀,其他都差不多。如果mysqli以过程式的方式操作的话,些函数必须指定资源,比如说mysqli_query(资源标识,SQL语句),并且资源标识的参数是放在前面的,而mysql_query(SQL语句,'可选')的资源标识是放在后面的,并且可以不指定,它默认是上一个打开的连接或资源。
2. mysqli.dll(对象方式)
$conn = new mysqli('localhost', 'user', 'password','data_base'); //这里的连接是new出来的,最后一个参数是直接指定数据库,不用mysql_select_db()了 //也可以构造时候不指定,然后 $conn -> select_db('data_base') $result = $conn -> query( 'select * from data_base' ); $row = $result -> fetch_row(); //取一行数据 echo row[0]; //输出第一个字段的值
更主要的是mysqli是php5提供的新函数库,(i)表示改进,其执行速度更快。
- 讨论mysql和mysqli两种连接数据库方式
- mysqli连接mysql数据库
- PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
- PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
- PHP 连接 MySQL(MySQLi方式)
- 连接MySQL数据库的两种方式介绍
- php7连接mysql数据库的两种方式
- 两种方式连接数据库
- MySQL连接两种方式
- PHP使用mysqli连接MySQL数据库
- 【PHP】使用mysqli连接MySql数据库
- mysql,mysqli,pdo方式连接数据库[no such file or directory]
- PHP连接mysql数据库之根据配置文件选择mysqli还是pdo方式
- php7配置mysqli和使用mysqli连接mysql
- JAVA连接数据库的两种方式,JDBC和JNDI
- php mysqli两种操作方式示例
- php+mysqli数据库连接的两种方式
- [mysql]MySQL 两种连接方式
- HDU4745环的回文串
- redis.conf的常用配置
- Android-自定义滑动按钮
- java内存区域知识点图解
- mysql中将15位身份证号改为18位
- 讨论mysql和mysqli两种连接数据库方式
- mysql创建和删除表
- JDBC之使用策略模式和模板方法模式优化代码
- Vue笔记
- Win7桌面任务栏的高度怎么调整教程 如何更改WIN7 桌面底部栏的大小
- Linux最小系统的烧写
- Python 定制类的特殊方法与授权
- 输出等腰三角形
- NOIP2014 飞扬的小鸟 动态规划