PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
原文: PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

PHP 5 及以上版本建议使用以下方式连接 MySQL :
- MySQLi extension ("i" 意为 improved)
 - PDO (PHP Data Objects)
 
1. PHP 连接 MySQL
__construct ([ string $host [, string $username [, string $passwd [, string $dbname [, int $port [, string $socket ]]]]]] )
要建立与MySQL的连接可以通过其构造方法实例化mysqli类,例如下面的代码:
- <?php
 - $db_host = "localhost"; //连接的服务器地址
 - $db_user = "root"; //连接数据库的用户名
 - $db_psw = "root"; //连接数据库的密码
 - $db_name = "ikeepstudying"; //连接的数据库名称
 - // 创建连接
 - $conn = new mysqli($db_host,$db_user,$db_psw,$db_name);
 - // 检测连接
 - if ($conn->connect_error) {
 - die("连接失败: " . $conn->connect_error);
 - // 或者使用
 - // die('Error : ('. $conn->connect_errno .') '. $conn->connect_error);
 - }
 - echo "连接成功";
 - ?>
 
mysqli还提供了一个连接MySQL的成员方法connect()。当实例化构造方法为空的mysqli类时,用mysqli对象调用connect()方法同样可连接MySQL,例如,下面的代码:
- <?php
 - $db_host = "localhost"; //连接的服务器地址
 - $db_user = "root"; //连接数据库的用户名
 - $db_psw = "root"; //连接数据库的密码
 - $db_name = "ikeepstudying"; //连接的数据库名称
 - $conn = new mysqli();
 - $conn->connect($db_host,$db_user,$db_psw,$db_name);
 - // 检测连接
 - if ($conn->connect_error) {
 - die("连接失败: " . $conn->connect_error);
 - // 或者使用
 - // die('Error : ('. $conn->connect_errno .') '. $conn->connect_error);
 - }
 - echo "连接成功";
 - ?>
 
关闭与MySQL服务器的连接通过mysqli对象调用close()方法即可,例如:
- $conn->close();
 
mysqli_connect ([ string $host [, string $username [, string $passwd [, string $dbname [, int $port [, string $socket ]]]]]] )
mysqli_connect()函数的用法与mysql扩展中的mysql_connect()函数用法十分相似,下面是mysqli_connect()函数的用法示例:
- <?php
 - $servername = "localhost";
 - $username = "username";
 - $password = "password";
 - $database = "ikeepstudying";
 - // 创建连接
 - $conn = mysqli_connect($servername, $username, $password, $database);
 - // 检测连接
 - if (!$conn) {
 - die("Connection failed: " . mysqli_connect_error());
 - }
 - echo "连接成功";
 - ?>
 
关闭与MySQL服务器的连接使用mysqli_close()函数,例如:
- mysqli_close();
 
2. PHP MySQL 插入数据
在创建完数据库和表后,我们可以向表中添加数据。
以下为一些语法规则:
- PHP 中 SQL 查询语句必须使用引号
 - 在 SQL 查询语句中的字符串值必须加引号
 - 数值的值不需要引号
 - NULL 值不需要引号
 
INSERT INTO 语句通常用于向 MySQL 表添加新的记录:
- INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...)
 
以下实例向 "MyGuests" 表添加了新的记录:
- <?php
 - $servername = "localhost";
 - $username = "username";
 - $password = "password";
 - $dbname = "ikeepstudying";
 - // 创建连接
 - $conn = new mysqli($servername, $username, $password, $dbname);
 - // 检测连接
 - if ($conn->connect_error) {
 - die("连接失败: " . $conn->connect_error);
 - }
 - $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')";
 - if ($conn->query($sql) === TRUE) {
 - echo "新记录插入成功";
 - } else {
 - echo "Error: " . $sql . "<br>" . $conn->error;
 - }
 - $conn->close();
 - ?>
 
插入多条记录:
- <?php
 - $servername = "localhost";
 - $username = "username";
 - $password = "password";
 - $dbname = "ikeepstudying";
 - // 创建链接
 - $conn = new mysqli($servername, $username, $password, $dbname);
 - // 检查链接
 - if ($conn->connect_error) {
 - die("连接失败: " . $conn->connect_error);
 - }
 - $sql = "INSERT INTO MyGuests (firstname, lastname, email)
 - VALUES ('John', 'Doe', 'john@example.com');";
 - $sql .= "INSERT INTO MyGuests (firstname, lastname, email)
 - VALUES ('Mary', 'Moe', 'mary@example.com');";
 - $sql .= "INSERT INTO MyGuests (firstname, lastname, email)
 - VALUES ('Julie', 'Dooley', 'julie@example.com')";
 - if ($conn->multi_query($sql) === TRUE) {
 - echo "新记录插入成功";
 - } else {
 - echo "Error: " . $sql . "<br>" . $conn->error;
 - }
 - $conn->close();
 - ?>
 
请注意,每个SQL语句必须用分号隔开。
2.面向过程
- <?php
 - $servername = "localhost";
 - $username = "username";
 - $password = "password";
 - $dbname = "ikeepstudying";
 - // 创建连接
 - $conn = mysqli_connect($servername, $username, $password, $dbname);
 - // 检测连接
 - if (!$conn) {
 - die("Connection failed: " . mysqli_connect_error());
 - }
 - $sql = "INSERT INTO MyGuests (firstname, lastname, email)
 - VALUES ('John', 'Doe', 'john@example.com')";
 - if (mysqli_query($conn, $sql)) {
 - echo "新记录插入成功";
 - } else {
 - echo "Error: " . $sql . "<br>" . mysqli_error($conn);
 - }
 - mysqli_close($conn);
 - ?>
 
插入多条记录:
- <?php
 - $servername = "localhost";
 - $username = "username";
 - $password = "password";
 - $dbname = "ikeepstudying";
 - // 创建链接
 - $conn = mysqli_connect($servername, $username, $password, $dbname);
 - // 检查链接
 - if (!$conn) {
 - die("连接失败: " . mysqli_connect_error());
 - }
 - $sql = "INSERT INTO MyGuests (firstname, lastname, email)
 - VALUES ('John', 'Doe', 'john@example.com');";
 - $sql .= "INSERT INTO MyGuests (firstname, lastname, email)
 - VALUES ('Mary', 'Moe', 'mary@example.com');";
 - $sql .= "INSERT INTO MyGuests (firstname, lastname, email)
 - VALUES ('Julie', 'Dooley', 'julie@example.com')";
 - if (mysqli_multi_query($conn, $sql)) {
 - echo "新记录插入成功";
 - } else {
 - echo "Error: " . $sql . "<br>" . mysqli_error($conn);
 - }
 - mysqli_close($conn);
 - ?>
 
php5和新增了获取最新插入值的ID的函数:mysqli_insert_id($conn),和之前的mysql_insert_id()类似。
都是用在insert语句之后获取最新的自动id号,要注意的是mysqli_insert_id(),括号里面的一定要是数据库连接而不是执行结果$result。
程序实例:
- $conn = new mysqli("127.0.0.1","root","","ikeepstudying") or die("数据库连接超时!");
 - $sql = "insert into my_table (name,url) values('ikeepstudying','http://justcode.ikeepstudying.com')";
 - $result = $conn->query($sql) or die("失败");
 - echo mysqli_insert_id($conn); //输出刚刚插入数据的ID,注意:括号里面的要是$conn而不是$result
 
3. PHP MySQL 预处理语句
预处理语句对于防止 MySQL 注入是非常有用的。使用预准备语句可提高重复使用语句的性能,在PHP中,使用prepare()方法来进行预准备语句查询,使用execute()方法来执行预准备语句。PHP有两种预准备语句:一种是绑定结果,另一种是绑定参数。
预处理语句, 绑定参数及绑定结果
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。
预处理语句的工作原理如下:
- 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:
- INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
 
 - 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。
 - 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
 
相比于直接执行SQL语句,预处理语句有两个主要优点:
- 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
 - 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
 - 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
 
MySQLi 预处理语句及绑定参数
bool bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
以下实例在 MySQLi 中使用了预处理语句,并绑定了相应的参数:
- <?php
 - $servername = "localhost";
 - $username = "username";
 - $password = "password";
 - $dbname = "ikeepstudying";
 - // 创建连接
 - $conn = new mysqli($servername, $username, $password, $dbname);
 - // 检测连接
 - if ($conn->connect_error) {
 - die("连接失败: " . $conn->connect_error);
 - }
 - // 预处理及绑定
 - $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");
 - $stmt->bind_param("sss", $firstname, $lastname, $email);
 - // 设置参数并执行
 - $firstname = "John";
 - $lastname = "Doe";
 - $email = "john@example.com";
 - $stmt->execute();
 - $firstname = "Mary";
 - $lastname = "Moe";
 - $email = "mary@example.com";
 - $stmt->execute();
 - $firstname = "Julie";
 - $lastname = "Dooley";
 - $email = "julie@example.com";
 - $stmt->execute();
 - echo "新记录插入成功";
 - $stmt->close();
 - $conn->close();
 - ?>
 
- "INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)"
 
在 SQL 语句中,我们使用了问号 (?),在此我们可以将问号替换为整型,字符串,双精度浮点型和布尔值。
接下来,让我们来看下 bind_param() 函数:
- $stmt->bind_param("sss", $firstname, $lastname, $email);
 
该函数绑定了 SQL 的参数,且告诉数据库参数的值。 "sss" 参数列处理其余参数的数据类型。s 字符告诉数据库该参数为字符串。
| 
 字符种类 
 | 
 代表的数据类型 
 | 
| 
 i 
 | 
 integer 
 | 
| 
 d 
 | 
 double 
 | 
| 
 s 
 | 
 string 
 | 
| 
 b 
 | 
 blob 
 | 
通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险。
注意: 如果你想插入其他数据(用户输入),对数据的验证是非常重要的。
MySQLi 预处理语句及绑定结果
所谓绑定结果就是把PHP脚本中的自定义变量绑定到结果集中的相应字段上,这些变量就代表着所查询的记录,绑定结果的示例代码如下:
- <?php
 - $mysqli = new mysqli("localhost","root","root","ikeepstudying"); //实例化mysqli
 - $query = "select * from MyGuests";
 - $result = $mysqli->prepare($query); //进行预准备语句查询
 - $result->execute(); //执行预准备语句
 - $result->bind_result($id,$firstname,$lastname,$email); //绑定结果
 - while ($result->fetch()) {
 - echo $id;
 - echo $firstname;
 - echo $lastname;
 - echo $email;
 - }
 - $result->close(); //关闭预准备语句
 - ?>
 
在绑定结果的时候,脚本中的变量要与结果集中的字段一一对应,绑定完以后,通过fetch()方法将绑定在结果集中的变量一一取出来,最后将预准备语句和数据库连接分别关闭。
MySQLi 同时绑定参数和绑定结果
在一个脚本中还可以同时绑定参数和绑定结果,示例代码如下:
- <?php
 - $conn = new mysqli("localhost","root","root","ikeepstudying"); //实例化mysqli
 - $query = "select * from MyGuests where id < ?";
 - $result = $conn->prepare($query);
 - $result->bind_param("i",$id); //绑定参数
 - $id=4;
 - $result->execute();
 - $result->bind_result($id,$number,$name,$age); //绑定结果
 - while ($result->fetch()) {
 - echo $id;
 - echo $firstname;
 - echo $lastname;
 - echo $email;
 - }
 - $result->close();
 - $conn->close();
 - ?>
 
4. PHP MySQL 读取数据, 删除及更新
SELECT 语句用于从数据表中读取数据:
SELECT column_name(s) FROM table_name
mixed query ( string $query [, int $resultmode ] )
1.面向对象
- <?php
 - $mysqli = new mysqli("localhost","root","root","ikeepstudying"); //实例化mysqli
 - $query = "select * from MyGuests";
 - $result = $mysqli->query($query);
 - if ($result) {
 - if($result->num_rows>0){ //判断结果集中行的数目是否大于0
 - while($row = $result->fetch_array() ){ //循环输出结果集中的记录
 - echo ($row[0])."<br>";
 - echo ($row[1])."<br>";
 - echo ($row[2])."<br>";
 - echo ($row[3])."<br>";
 - echo "<hr>";
 - }
 - }
 - }else {
 - echo "查询失败";
 - }
 - $result->free();
 - $mysqli->close();
 - ?>
 
在上面代码中,num_rows为结果集的一个属性,返回结果集中行的数目。方法fetch_array()将结果集中的记录放入一个数组中并将其返回。最后使用free()方法将结果集中的内存释放,使用close()方法将数据库连接关闭。
对于删除记录(delete)、保存记录(insert)和修改记录(update)的操作,也是使用query()方法来执行的,下面是删除记录的例子:
- <?php
 - $mysqli = new mysqli("localhost","root","root","ikeepstudying"); //实例化mysqli
 - $query = "delete from MyGuests where id=2";
 - $result = $mysqli->query($query);
 - if ($result){
 - echo "删除操作执行成功";
 - }else {
 - echo "删除操作执行失败";
 - }
 - $mysqli->close();
 - ?>
 
完整实例:
- <?php
 - $servername = "localhost";
 - $username = "username";
 - $password = "password";
 - $dbname = "ikeepstudying";
 - // 创建连接
 - $conn = new mysqli($servername, $username, $password, $dbname);
 - // 检测连接
 - if ($conn->connect_error) {
 - die("连接失败: " . $conn->connect_error);
 - }
 - $sql = "SELECT id, firstname, lastname FROM MyGuests";
 - $result = $conn->query($sql);
 - if ($result->num_rows > 0) {
 - // 输出每行数据
 - while($row = $result->fetch_assoc()) {
 - echo "<br> id: ". $row["id"]. " - Name: ". $row["firstname"]. " " . $row["lastname"];
 - }
 - } else {
 - echo "0 个结果";
 - }
 - $conn->close();
 - ?>
 
更多实例:
INSERT
- $stmt = $mysqli->prepare("INSERT INTO movies(filmName,
 - filmDescription,filmImage,filmPrice,filmReview) VALUES (?, ?, ?, ?, ?)");
 - $stmt->bind_param('sssdi', $_POST['filmName'],
 - $_POST['filmDescription'],
 - $_POST['filmImage'],
 - $_POST['filmPrice'],
 - $_POST['filmReview']);
 - $stmt->execute();
 - $stmt->close();
 
Getting Auto Increment Key Values with insert_id
- $stmt = $mysqli->prepare("INSERT INTO movies(filmName,
 - filmDescription,filmImage,filmPrice,filmReview) VALUES (?, ?, ?, ?, ?)");
 - $stmt->bind_param('sssdi', $_POST['filmName'],
 - $_POST['filmDescription'],
 - $_POST['filmImage'],
 - $_POST['filmPrice'],
 - $_POST['filmReview']);
 - $stmt->execute();
 - $newId = $stmt->insert_id;
 - $stmt->close();
 
UPDATE
- $stmt = $mysqli->prepare("UPDATE movies SET filmName = ?,
 - filmDescription = ?,
 - filmImage = ?,
 - filmPrice = ?,
 - filmReview = ?
 - WHERE filmID = ?");
 - $stmt->bind_param('sssdii',
 - $_POST['filmName'],
 - $_POST['filmDescription'],
 - $_POST['filmImage'],
 - $_POST['filmPrice'],
 - $_POST['filmReview'],
 - $_POST['filmID']);
 - $stmt->execute();
 - $stmt->close();
 
DELETE
- $stmt = $mysqli->prepare("DELETE FROM movies WHERE filmID = ?");
 - $stmt->bind_param('i', $_POST['filmID']);
 - $stmt->execute();
 - $stmt->close();
 
2.面向过程
- <?php
 - $con = mysqli_connect("localhost","username","password","ikeepstudying");
 - // 检测连接
 - if (mysqli_connect_errno())
 - {
 - echo "连接失败: " . mysqli_connect_error();
 - }
 - $result = mysqli_query($con,"SELECT * FROM Persons WHERE FirstName='Peter'");
 - while($row = mysqli_fetch_array($result))
 - {
 - echo $row['FirstName'] . " " . $row['LastName'];
 - echo "<br>";
 - }
 - ?>
 
5. mysqli 读取数据库的几种方式
mysqli有四种读取数据库数据的方式:mysqli_fetch_array(), mysqli_fetch_object(), mysqli_fetch_accoc(), mysqli_fetch_row()。
区别是:
- mysqli_fetch_array(),同时返回关系型数组和计数型数组2种,读取数据的时候我们可以用比如:$result[1] 或者是$result["username"]。
 - mysqli_fetch_accoc(),返回关系型数组,读取数据的时候我们可以用比如:$result["username"]。
 - mysqli_fetch_row(),返回计数型数组,读取数据的时候我们可以用比如:$result[0]。
 - mysqli_fetch_object(),返回一个对象,读取数据的时候我们可以用比如:$result->username的方式读取数据。
 
6. mysqli 一些函数的对比 ( 面向对象 vs 面向过程 )
1. mysqli 连接数据库:
$db = new mysqli(host,user,password,database);
 这是对象导向的连接方法,还有一种过程导向的连接方法。前者返回一个对象,后者返回一个资源。
 $db = mysqli_connect(host,user,password,database);
2.mysqli 连接出错函数:
$db->connect_error
 or
 mysqli_connect_error();
 如果连接出错,该函数返回一个错误号,否则返回0;
3.选择数据库:
$db->select_db(dbname);
 or
 mysqli_select_db(db_resource,db_name);
4.mysqli 执行查询
$result = $db->query($query);
 or
 $result = mysqli_query($db,$query);
5.返回结果的行数:
$num_results = $result->num_rows;
 or
 $num_results = mysqli_num_rows($result);
6.取出每一行的结果(返回关系型数组):
$row = $result->fetch_assoc();
 or
 $row = mysqli_fetch_assoc($result);
7.取出每一行的结果(返回计数型数组):
$row = $result->fetch_row($result);
 or
 $row = mysqli_fetch_row($result);
8.取出每一行的结果(返回一个对象):
$row = $result->fetch_object();
 or
 $row = mysqli_fetch_object($result);
9.释放查询结果:
$result->free();
 or
 mysqli_free_result($result);
10.关闭数据库连接:
$db->close();
 or
 mysqli_close($db);
11.一条查询所影响的行数:
$db->affected_rows;
 or
 mysqli_affected_rows($result);
12.模式化SQL语句执行:
$query = “insert into books values(?, ?, ?, ?)”;
 $stmt = $db->prepare($query);
 $stmt->bind_param(“sssd”, $isbn, $author, $title, $price);
 $stmt->execute();
 echo $stmt->affected_rows.’ book inserted into database.’;
 $stmt->close();
在过程化执行方式中,
$db->prepare()对应mysqli_stmt_prepare()函数;
 $stmt->bind_param()对应mysqli_stmt_bind_param()函数;
 $stmt->execute() 对应mysqli_stmt_execute()函数;
本文转自: PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)的更多相关文章
- php+mysqli实现批量执行插入、更新及删除数据的方法
		
本文实例讲述了php+mysqli实现批量执行插入.更新及删除数据的方法.分享给大家供大家参考.具体如下: mysqli批量执行插入/更新/删除数据,函数为 multi_query(). 下面的代码只 ...
 - MySQL数据库(四)—— 记录相关操作之插入、更新、删除、查询(单表、多表)
		
一.插入数据(insert) 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); # 后面的值必须与字段 ...
 - Entity Framework 6 Recipes 2nd Edition(10-10)译 - > 为TPH继承的插入、更新、删除操作映射到存储过程
		
10-10. 为TPH继承的插入.更新.删除操作映射到存储过程 问题 TPH继承模型,想把它的插入.修改.删除操作映射到存储过程 Solution 假设数据库有一个描述不同种类的产品表(Product ...
 - MySQL(四) 数据表的插入、更新、删除数据
		
序言 数据表的插入.更新.删除非常简单,但是简单的也要学习,细节决定成败. ---WH 一.插入数据 格式:INSERT INTO 表名(字段名...)VALUES(值...); 创建环境 使用per ...
 - SQL Server索引进阶:第十三级,插入,更新,删除
		
在第十级到十二级中,我们看了索引的内部结构,以及改变结构造成的影响.在本文中,继续查看Insert,update,delete和merge造成的影响.首先,我们单独看一下这四个命令. 插入INSERT ...
 - JPA中自定义的插入、更新、删除方法为什么要添加@Modifying注解和@Transactional注解?
		
前几天,有个同事在使用JPA的自定义SQL方法时,程序一直报异常,捣鼓了半天也没能解决,咨询我的时候,我看了一眼他的程序,差不多是这个样子的: @Repository public interface ...
 - PostgreSQL自学笔记:7 插入、更新与删除数据
		
7 插入.更新与删除数据 7.1 插入数据 先创建表person: create table person( id int not null, name char(40) not null defau ...
 - ASP入门(二十三)- 数据库插入、更新和删除操作
		
我们这里介绍如何使用 Recordset 对象进行插入.更新和删除操作,顺便和 SQL 语句对比. 插入记录 AddNew 方法用于插入一条记录,首先打开一个记录集,并且这个记录具备可写特性,而后调用 ...
 - Oracle查询优化-插入、更新与删除
		
--插入.更新与删除 --1.插入新纪录 --1.1.建立测试表 DROP TABLE TEST; CREATE TABLE TEST( C1 ) DEFAULT '默认1', C2 ) DEFAUL ...
 
随机推荐
- 【BZOJ-1497】最大获利     最大流
			
1497: [NOI2006]最大获利 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 3800 Solved: 1848[Submit][Status] ...
 - eclipse+SVN文件只显示版本号,不显示时间和作者解决办法
			
SVN默认是显示提交次数的 改成这样 就可以了...
 - A.Kaw矩阵代数初步学习笔记 10. Eigenvalues and Eigenvectors
			
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
 - Linux 下的常用工具
			
Useful Linux Utilities (This article is under constant construction) ssh 相关文章 How To Change OpenSSH ...
 - HDU 5738 Eureka
			
传送门 题目大意: 给出平面上的$n$个点,每个点有唯一的标号($\text{label}$),这$n$个标号的集合记作$S$,点可能重合.求满足下列条件的$S$的子集$T$的数目: 1. $|T|\ ...
 - CF 321B Kefa and Company(贪心)
			
题目链接: 传送门 Kefa and Company time limit per test:2 second memory limit per test:256 megabytes Desc ...
 - Hough Transform
			
Hough Transform Introduction: The Hough transform is an algorithm that will take a collection of poi ...
 - POJ - 1511 Invitation Cards(Dijkstra变形题)
			
题意: 给定一个有向图,求从源点到其他各点的往返最短路径和.且这个图有一个性质:任何一个环都会经过源点. 图中的节点个数范围:0-100w; 分析: 我们先可以利用Dijkstra算法求解从源点到其余 ...
 - Logistic Regression分类器
			
1. 两类Logistic回归 Logistic回归是一种非常高效的分类器.它不仅可以预测样本的类别,还可以计算出分类的概率信息. 不妨设有$n$个训练样本$\{x_1, ..., x_n\}$,$x ...
 - Android shell 下 busybox,clear,tcpdump、、众多命令的移植
			
http://my.oschina.net/mopidick/blog/167372 作为一名Android开发者,经常需要进入Android 的shell终端运行一些命令.但是我们发现Android ...