Heim > 类库下载 > PHP类库 > Hauptteil

php操纵mysqli数据库

高洛峰
Freigeben: 2019-02-23 15:06:27
Original
1297 Leute haben es durchsucht

从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加

i表示改进的意思 功能多、效率高、稳定

相关mysql视频教程推荐:《mysql教程

编译时参数:

./configure --with-mysql=/usr/bin/mysql_config \ #使用 Mysql ClientLibrary(libmysql)构建
--with-mysqli=mysqlnd \ #使用 Mysql Native Dirver 即mysqlnd
--with-pdo-mysql=mysqlnd #使用 Mysql Native Dirver 即mysqlnd
Nach dem Login kopieren

由于版权问题 从 php5.3开始 php开始用 mysqlnd 替代 libmysql.dll

mysqlnd 是zend公司开发的mysql数据库驱动,相比原来各方面都有所提高

#使用mysqlnd编译

./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd 加上你的参数
Nach dem Login kopieren

mysqli 过程、对象方式都支持

mysqli提供的三个类:

   1、mysqli 和连接相关的
   2、MySQLi_Result 处理结果集
   3、mysqli_stmt 预处理类
Nach dem Login kopieren

#设置字符集
set_charset

#获取字符集
character_set_name

获取数据库对象

//创建mysqli对象方式 1
//屏蔽连接产生的错误$mysqli = new mysqli('127.0.0.1', 'root', '', 'test');//只能用函数来判断是否连接成功if(mysqli_connect_errno())
{    echo mysqli_connect_error();
}//创建mysqli对象方式 2 可以设置一些参数$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');
Nach dem Login kopieren

query:失败返回false,select成功返回结果集对象,其他返回true 非false,意味着sql执行成功了

无结果集示例

$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');$sql = "insert into limove(`name`, `order`) values('aa', 11)";$rst = $mysqli->query($sql);$sql = "delete from limove where id = 221";$rst = $mysqli->query($sql);if($rst === false)
{
    ee($mysqli->errno);
    ee($mysqli->error);
}#影响条数
ee($mysqli->affected_rows);#插入的id
ee($mysqli->insert_id);

ee($mysqli);
Nach dem Login kopieren

有结果集

$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');$sql = "select * from limove as limove_as";$result = $mysqli->query($sql);if($result === false)
{
    ee($mysqli->errno);
    ee($mysqli->error);
}#行数
ee($result->num_rows);#列数
ee($result->field_count);#字段个数
ee($result->field_count);#获取所有字段的信息$field_arr = $result->fetch_fields();#移动字段的指针
// $result->field_seek(1);#依次获取字段的信息while($field = $result->fetch_field())
{
    ee($field);
}#移动记录指针$result->data_seek(1);#一次获取所有数据$data = $result->fetch_all(MYSQLI_ASSOC);#关联数组方式获取结果集$data = array();$result->data_seek(0); #重置指针到起始while($row = $result->fetch_assoc())
{    $data[] = $row;
}

ee($data);$result->free();$mysqli->close();
Nach dem Login kopieren

一次 执行多条语句 multiquery (不推荐使用)

  无结果集,此时 affected_rows 只能获取到最后的那条影响的条数

$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');$sql_arr = array(
    'insert into limove(id,`name`, `order`) values(null, 1, 2)',        
    'insert into limove(id,`name`, `order`) values(null, 1, 222)',        
    'delete from limove where `order` = 2',        );$sql = implode(';', $sql_arr);$result = $mysqli->multi_query($sql);if($result === false)
{
    ee($mysqli->errno);
    ee($mysqli->error);
}$mysqli->close();
Nach dem Login kopieren

有结果集

$mysqli = mysqli_init();$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2);//设置超时时间$mysqli->real_connect('127.0.0.1', 'root', '', 'test');$sql_arr = array(
    'show tables',        
    'desc select * from limove',        
    'show create table limove',        );$sql = implode(';', $sql_arr);$rst = $mysqli->multi_query($sql);if($rst === false)
{
    ee($mysqli->errno);
    ee($mysqli->error);
}do{    $result = $mysqli->store_result();#获取当前光标所在的结果集    
    $data = $result->fetch_all();
    
    ee($data);
    
}while($mysqli->next_result());#光标移动到下一个结果集$mysqli->close();
Nach dem Login kopieren

事务处理:

$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb");    //事务处理    $mysqli->autocommit(0);    $error=true;    $price=50;    $sql="update zh set ye=ye-{$price} where name='zhangsan'";    
    $result=$mysqli->query($sql);    if(!$result){        $error=false;        echo "从张三转出失败
";
    }else{        if($mysqli->affected_rows==0){            $error=false;            echo "张三的钱没有变化";    
        }else{            echo "从张三账号中转出成功!
";
        }
    }    $sql="update zh set ye=ye+{$price} where name='lisi1'";    $result=$mysqli->query($sql);    if(!$result){        $error=false;        echo "从李四转入失败
";
    }else{        if($mysqli->affected_rows==0){            $error=false;            echo "李四的钱没有变化";    
        }else{            echo "向李四账号中转入成功!
";
        }
    }    if($error){        echo "转账成功!";        $mysqli->commit();
    }else{        echo "转账失败!";        $mysqli->rollback();
    }    $mysqli->autocommit(1);    $mysqli->close();
Nach dem Login kopieren

mysqli_stmt:mysqli预处理类(推荐):表示了准备好的一个语句,服务器端只编译一次sql

用mysqli和mysqli_result可以实现同样的功能

优点:效率高,适用于语句相同只是数据不同的情况 ,可以阻止sql注入的产生

mysqli_stmt示例:非select语句

require  'fns.php';//创建mysqli对象方式 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');//只能用函数来判断是否连接成功if(mysqli_connect_errno())
{    echo mysqli_connect_error();    die;
}$mysqli->set_charset('utf8');$sql = "insert into limove values(?, ?, ?)"; //语句一样值不相同情况//mysqli中有直接的方法可用$stmt = $mysqli->prepare($sql);//绑定参数$stmt->bind_param('iss', $id, $name, $order);for($i=0;$iexecute();

}//最后id
ee($stmt->insert_id);//影响的行数 注:最后一条执行的
ee($stmt->affected_rows);//错误号
ee($stmt->errno);//错误信息
ee($stmt->error);//stmt对象中可以看到更多的信息
ee($stmt);

eee($mysqli);
Nach dem Login kopieren

mysqli_stmt示例:select语句 1

require  'fns.php';//创建mysqli对象方式 
$mysqli = @new mysqli('127.0.0.1', 'root', '', 'test');//只能用函数来判断是否连接成功if(mysqli_connect_errno())
{    echo mysqli_connect_error();    die;
}$mysqli->set_charset('utf8');$sql = "select * from limove where id							
Nach dem Login kopieren

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!