GVKun编程网logo

php中选择什么接口(mysql、mysqli)访问mysql_php技巧(php mysql接口)

2

如果您想了解php中选择什么接口(mysql、mysqli)访问mysql_php技巧的相关知识,那么本文是一篇不可错过的文章,我们将对phpmysql接口进行全面详尽的解释,并且为您提供关于cent

如果您想了解php中选择什么接口(mysql、mysqli)访问mysql_php技巧的相关知识,那么本文是一篇不可错过的文章,我们将对php mysql接口进行全面详尽的解释,并且为您提供关于centos 7 单独安装 mysql 和 mysqli 和 pdo_mysql 扩展、Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in、mysql VS mysqli,该用哪一个?该怎么处理、Mysql 与 Mysqli 的区别及特点的有价值的信息。

本文目录一览:

php中选择什么接口(mysql、mysqli)访问mysql_php技巧(php mysql接口)

php中选择什么接口(mysql、mysqli)访问mysql_php技巧(php mysql接口)

我们知道,mysqli是PHP 5中新提供的MySQL接口,此接口使用了面向对象的思想。使用mysqli接口的代码可读性更强,其执行效率比mysql接口高。而且mysqli提供了一个能够一次执行多个SQL语句的multi_query()函数。但是,mysqli接口只支持PHP 5和MySQL 4.1之后的版本。

query()函数一次只能执行一条SQL语句,而multi_query()函数可以一次执行多个SQL语句。
如果第一个SQL语句执行正确,那么multi_query()函数返回true,否则返回false。
通过store_result()函数获取multi_query()函数执行查询的记录。一次只能获取一个SQL语句的执行结果。
通过next_result()函数判断下一个SQL语句的结果是否存在,如果存在,返回true。

示例:

复制代码 代码如下:

$sql="select * from score; select * from student";
$rs=$connection->multi_query($sql);

centos 7 单独安装 mysql 和 mysqli 和 pdo_mysql 扩展

centos 7 单独安装 mysql 和 mysqli 和 pdo_mysql 扩展

一.mysql 扩展

下载地址:http://git.php.net/?p=pecl/database/mysql.git;a=summary

下载 PHP7 的传统 mysql 扩展于 windows 下,然后再通过其它方式下载到 linux 上。

下载后命令如下:

tar zxf mysql-230a828.tar.gz

cd mysql-230a828

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config --with-mysql=/usr/local/mysql

./configure --with-php-config=/opt/php/bin/php-config --with-mysql=mysqlnd

make && make install

然后修改 php.ini

添加 extension=mysql.so

二.mysqli 扩展

1: 用 find 命令,查找一下 mysqli 的文件目录,find /-name "mysqli"

2: cd 到 mysqli 文件目录下,执行 /usr/local/php/bin/phpize

3:./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/mysql/bin/mysql_config

4:   make

5:   make test

6:   make install

(不出错就会显示 Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20151012 / 之类)

  现在 mysqli.so 文件就出来了,在 /usr/local/php/lib/php/extensions/no-debug-zts-20151012/ 下  

7. 直接在 php.ini 里把这个文件加载即可

  extension_dir="/usr/local/php/ext”  

       extension=mysqli.so

  保存退出并把 mysqli.so 这个文件 cp 到 /usr/local/php/ext 下,  然后重启 web 服务器

若./configure 配置的时候报错:configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

解决方法:

wget https://sourceforge.net/projects/re2c/files/0.16/re2c-0.16.tar.gz 
tar zxf re2c-0.16.tar.gz && cd re2c-0.16 
./configure 
make && make install

make 时报错:error: ext/mysqlnd/mysql_float_to_double.h: No such file or directory

解决方法:

# pwd 
/home/neo/tools/php-5.5.28/ext/mysqli
# vim mysqli_api.c
把第36行的
#include "ext/mysqlnd/mysql_float_to_double.h"
修改为
#include "/home/neo/tools/php-5.5.28/ext/mysqlnd/mysql_float_to_double.h"

或参考链接:http://blog.csdn.net/youcijibi/article/details/77002714

三.pdo_mysql 扩展

大致同 mysqli 扩展

./configure --with-php-config=${php52_dir}/bin/php-config --with-pdo-mysql=${mysql_dir}
make

make install

手动开启 PDO,在 php-ini 文件上开启,连接数据库用。mysql 开启 PDO, 在 php.ini 加上 extension=pdo_mysql.so,extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613", 重启 web 服务器

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in

源代码如下:
<?php
if (__FILE__ == $_SERVER[''SCRIPT_FILENAME'']) exit(''No direct access allowed.'');

/*
 *作者:丁亮
 *日期:2014年05月06日
 *版本:V0.0.1
 *版权归属:中国科学技术大学 西区
 */

class MySQLDatabase {

private $connection;
public $last_query;
private $magic_quotes_active;
private $real_escape_string_exists;

    function __construct() {
     $this->open_connection();
$this->magic_quotes_active = get_magic_quotes_gpc();
$this->real_escape_string_exists = function_exists( "mysql_real_escape_string" );
    }

public function open_connection() {
$this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);
mysql_query(''SET NAMES utf8'', $this->connection);
if (!$this->connection) {
die("Database connection failed: " . mysql_error());
} else {
$db_select = mysql_select_db(DB_NAME, $this->connection);
if (!$db_select) {
die("Database selection failed: " . mysql_error());
}
}
}
 

public function close_connection() {
if(isset($this->connection)) {
mysql_close($this->connection);
unset($this->connection);
}
}

public function query($sql) {
$this->last_query = $sql;
$result = mysql_query($sql, $this->connection);
$this->confirm_query($result);
return $result;
}

public function escape_value( $value ) {
if( $this->real_escape_string_exists ) { // PHP v4.3.0 or higher
// undo any magic quote effects so mysql_real_escape_string can do the work
if( $this->magic_quotes_active ) { $value = stripslashes( $value ); }
$value = mysql_real_escape_string( $value );
} else { // before PHP v4.3.0
// if magic quotes aren''t already on then add slashes manually
if( !$this->magic_quotes_active ) { $value = addslashes( $value ); }
// if magic quotes are active, then the slashes already exist
}
return $value;
}

// "database-neutral" methods
   public function fetch_array($result_set) {
    return mysql_fetch_array($result_set);
   }

   public function num_rows($result_set) {
    return mysql_num_rows($result_set);
   }
  
   public function insert_id() {
    // get the last id inserted over the current db connection
    return mysql_insert_id($this->connection);
   }
  
   public function affected_rows() {
    return mysql_affected_rows($this->connection);
   }

private function confirm_query($result) {
if (!$result) {
    $output = "Database query failed: " . mysql_error() . "<br /><br />";
    $output .= "Last SQL query: " . $this->last_query;
    die( $output );
}
}

}

$database = new MySQLDatabase();
$db =& $database;


请教PHP高手,如何用mysqli或者PDO方法改写,请发邮件给我:adb0314@gmail.com  不胜感谢!!!!

mysql VS mysqli,该用哪一个?该怎么处理

mysql VS mysqli,该用哪一个?该怎么处理

mysql VS mysqli,该用哪一个?
初学PHP,看到数据库这儿了
教科书中讲mysqli是一个新的扩展,在mysql扩展上进行了改进:
自身绑定/预备/执行功能
指针支持
多语句支持
……
问同事,他们基本都在用mysql而非mysqli,也不知道为什么?

达人讲解一下?

谢谢!

------解决方案--------------------
pdo
  !
------解决方案--------------------
好象是MYSQL吧
------解决方案--------------------
最新版的PHP已经要弃用mysql了
------解决方案--------------------
mysql 函数组是基于 mysql4 开发的面向过程的一组函数
mysqli 函数组是基于 mysql5 开发的面向对象的一组对象
为迎合老程序的需要,mysqli 也提供了面向过程的函数

建议使用 PDO form mysql

Mysql 与 Mysqli 的区别及特点

Mysql 与 Mysqli 的区别及特点

1) 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); 
?> 

乍看之下没什麽问题,但其实背后有些学问…
这种方式不能 Bind Column ,以前例的 SQL 叙述来说,$location 的地方容易被 SQL Injection。后来于是发展出了 mysql_escape_string () (备注:5.3.0 之后弃用) 以及 mysql_real_escape_string () 来解决这个问题,不过这麽一搞,整个叙述会变得複杂且丑陋,而且如果栏位多了,可以想见会是怎样的情形…

<?php 
$query = sprintf("SELECT * FROM users WHERE user=''%s'' AND password=''%s''", 
mysql_real_escape_string($user), 
mysql_real_escape_string($password)); 
mysql_query($query); 
?> 

 

2) 在 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(); 
?> 

但看到这边又发现了一些缺点,例如得 Bind Result,这个就有点多馀,不过这其实无关紧要,因为最大的问题还是在于这不是一个抽象 (Abstraction) 的方法,所以当后端更换资料库的时候,就是痛苦的开始…
于是 PDO 就出现了 (备注:目前 Ubuntu 和 Debian 来说,PDO 并没有直接的套件可以安装,而是必须透过 PECL 安装)。

roga@carlisten-lx:~$ pecl search pdo 
======================================= 
Package Stable/(Latest) Local 
PDO 1.0.3 (stable) PHP Data Objects Interface. 
PDO_4D 0.3 (beta) PDO driver for 4D-SQL database 
PDO_DBLIB 1.0 (stable) FreeTDS/Sybase/MSSQL driver for PDO 
PDO_FIREBIRD 0.2 (beta) Firebird/InterBase 6 driver for PDO 
PDO_IBM 1.3.2 (stable) PDO driver for IBM databases 
PDO_INFORMIX 1.2.6 (stable) PDO driver for IBM Informix INFORMIX databases 
PDO_MYSQL 1.0.2 (stable) MySQL driver for PDO 
PDO_OCI 1.0 (stable) Oracle Call Interface driver for PDO 
PDO_ODBC 1.0.1 (stable) ODBC v3 Interface driver for PDO 
PDO_PGSQL 1.0.2 (stable) PostgreSQL driver for PDO 
PDO_SQLITE 1.0.1 (stable) SQLite v3 Interface driver for PDO 
pdo_user 0.3.0 (beta) Userspace driver for PDO 

当透过 PECL 安装装好后,就可以透过以下方式来操作资料库:

<?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; 
?> 

乍看之下,PDO 的程式码好像也没有比较短,那到底好处是什麽呢?
1. PDO 连接资料库时透过 Connection String 来决定连接何种资料库。
2. PDO 可以透过 PDO::setAttribute 来决定连线时的设定,像是 Persistent Connection, 回传错误的方式 (Exception, E_WARNING, NULL)。甚至是回传栏位名称的大小写… 等等。
2. PDO 支援 Bind Column 的功能,除了基本的 Prepare, Execute 以外,也可以 Bind 单一栏位,并且指定栏位型态。
4. PDO 是 Abstraction Layer 所以就算更换储存媒介,需要花的功夫比起来是最少的。
可惜的是,儘管这些东西都已经出现很久了,但还是不够大众化。我想或许是肇因于大家习惯看坊间的书籍学习,但那些书本往往只会介绍最简单最传统的方式。导致很多人还是在用 MySQL 这种方直接连资料库。
不过,目前来说我个人还是最喜爱透过 DBI 来连接资料库,像是 ActiveRecord 以及 Propel ORM (Object-Relational Mapping)。
例如说以 ActiveRecord 为例,如果要实现这样的 SQL 叙述…
INSERT INTO `users` (id, name, gender, location) VALUES(1, ‘roga’, ‘male’, ‘tpe’)
以 PDO 来写是:

<?php 
$sql = "INSERT INTO `users` (id, name, gender, location) VALUES(?, ?, ?, ?)"; 
$sth = $dbh->prepare($sql); 
$sth->execute(array(1, ''roga'', ''male'', ''tpe'')); 
?> 

但以 ActiveRecord 来说的话,则是:

<?php 
$user = new User(); 
$user->id = 1; 
$user->name = ''roga''; 
$user->gender = ''male''; 
$user->location = ''tpe''; 
$user->save(); 
?> 

 

3) 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 做一个对比。

a: 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 语句,’可选’) 的资源标识是放在后面的,并且可以不指定,它默认是上一个打开的连接或资源。
b: 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]; //输出第一个字段的值 

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) 表示改进,其执行速度更快.

今天关于php中选择什么接口(mysql、mysqli)访问mysql_php技巧php mysql接口的讲解已经结束,谢谢您的阅读,如果想了解更多关于centos 7 单独安装 mysql 和 mysqli 和 pdo_mysql 扩展、Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in、mysql VS mysqli,该用哪一个?该怎么处理、Mysql 与 Mysqli 的区别及特点的相关知识,请在本站搜索。

本文标签:

上一篇MySQL之——提示"mysql deamon failed to start"错误的解决方法

下一篇MySQL 中字符串字段,在使用in时,没有加引号时的性能陷阱(mysql in 字符串)