从php5.5时候,mysql_connect也就是对应的是php_mysql.dll官方就不建议使用,所以在php7时候,直接删除掉了这个dll扩展文件。
菜鸟教程直接删掉了这个了,很尴尬,只剩下这两个东西给我们玩了。
PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相对进阶的功能,就 Extension 而言,本身也增加了安全性。
demo:
<?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 = 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(); ?>
PECL是什么东西来的呢???!!!记得去查查‘20170716
<?php $dsn = "mysql:host=$db_host;dbname=$db_name"; $dbh = new PDO($dsn, $db_user, $db_password); $sql = "SELECT `name`, `location` FROM `users` WHERE `location` = ? , `name` = ?"; $sth = $dbh->prepare($sql); $sth->execute(array($location, $name)); $result = $sth->fetch(PDO::FETCH_OBJ); echo $result->name . $result->location; $dbh = NULL; ?>
三个,没看出什么区别,好像就是写法吧,苦笑/哭笑/
插曲:
预防 SQL Injection的 function: mysql_real_escape_string() example: mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。 // 转义用户名和密码,以便在 SQL 中使用 $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user=‘" . $user . "‘ AND password=‘" . $pwd . "‘" 如果不转义SQL就会变成: SELECT * FROM users WHERE user=‘john‘ AND password=‘‘ OR ‘‘=‘‘ 至于在$_POST变量塞上 ; drop table user;什么的就是另外一回事了。 预防数据库攻击的正确做法: function check_input($value) { // 去除斜杠 if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // 如果不是数字则加引号 if (!is_numeric($value)) { $value = "‘" . mysql_real_escape_string($value) . "‘"; } return $value; }
mysql是非持继连接函数而mysqli是永远连接函数。
mysql每次链接都会打开一个连接的进程而mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销
mysqli不是默认开启的,win下要改php.ini,去掉php_mysqli.dll前的;,linux下要把mysqli编译进去。
插曲:
mysql_fetch_row(),mysql_fetch_array() 这两个函数,返回的都是一个数组,区别就是第一个函数返回的数组是只包含值,我们只能$row[0], $row[1],这样以数组下标来读取数据,而mysql_fetch_array()返回的数组既包含第一种,也包含键值 对的形式,我们可以这样读取数据,(假如数据库的字段是 username,passwd): $row[‘username‘], $row[‘passwd‘] 而且,如果用($row as $kay => $value)来操作的话,还以直接取得数据库的字段名称。 更主要的是mysqli是php5提供的新函数库,(i)表示改进,其执行速度更快.
时间: 2024-10-11 04:32:56