mysqli防注入

时间:2024.5.15

header('content-type:text/html;charset=utf-8');

//获取用户提交的name,password

if(isset($_POST['name'],$_POST['password'])){

$name=$_POST['name'];

$password=$_POST['password'];

// echo '<pre/>';

/* 使用mysql,但没有防注入功能,’or 1=1 or 1=1 or’可注入,不安全

$conn=@mysql_connect('localhost','root','');

mysql_query('set names utf8',$conn);

mysql_select_db('kun',$conn);

$mysql="select count(*) from admin where uname='$name' and upassword='$password'"; $result=mysql_query($mysql,$conn);

$i=mysql_result($result,0);

if($i!=0){

echo '登陆成功';

}else{

echo '登陆失败';

}

}

*/

//使用

mysqli $m=new mysqli('localhost','root','','kun'); $m->set_charset('utf8');

$s=$m->prepare("select count(*) from admin where uname=? and upassword=?");//返回一个声明的对象,否则false

$s->bind_param('ss',$name,$password);// 进行校对,成功时返回 TRUE, 或者在失败时返回 FALSE.s-string i-int d-double

$s->execute();//执行

/*

使用预处理语句,防注入

$result=$s->get_result();

$rs=$result->fetch_row();

$i=$rs[0];

if($i!=0){

echo '登陆成功';

}else{

echo '登陆失败';

}

*/

/*使用mysqli预处理语句,参数绑定,防注入’or 1=1 or 1=1 or’ 或‘or 1=1 or 1=1 or --’ $s->bind_result($c);//参数绑定

$s->fetch();

if($c==0){

echo '登陆失败';

}else{

echo '登陆成功';

}

*/

$s->close();

$m->close();

}


第二篇:mysqli笔记


$_mysqli 对属性操作无括号,对方法操作加括号,如果要执行的sql语句很长,分多行写,不然错误很难查找.......

一、数据库连接:

第一种传统写法:

$_mysqli = new mysqli('localhost','root','yangfan','testguest');

第二种传统写法:

$_mysqli = new mysqli();

$_mysqli->connect('localhost','root','yangfan','testguest');

第三种写法:

单独选择一个数据库

$_mysqli = new mysqli('localhost','root','yangfan');

$_mysqli->select_db('testguest');

二、出错提示:

//数据库连接时(用户名,密码错误)

if(mysqli_connect_errno()){

echo '数据库连接出错,错误信息为:'.mysqli_connect_error();

exit();

}

//数据库操作时发生的错误

@$_mysqli = new mysqli('localhost','root','yangfan');

$_mysqli->select_db('aaaa');

if($_mysqli->errno){

echo '数据库操作错误'.$_mysqli->error;

}

三、与数据库进行交互。

1、获取数据

// 设置一下编码 utf8

$_mysqli ->set_charset( "utf8" );

// 创建一句 SQL 语句

$_sql = "SELECT * FROM tg_user" ;

// 执行 sql 语句把结果集赋给 $_result

$_result = $_mysqli ->query( $_sql );//数据库中的所有值

// 将结果集的第一行输出

print_r( $_row=$_result ->fetch_row());//在所有的数据库结果集中查询一列

//第一行第一个

echo $_row[0];

// 释放查询内存 ( 销毁 )

$_result->free();

$_mysqli->close();

2、解析查询结果:

(1)、打印出某一列的所有值:(索引数组)

while($_row = $_result->fetch_row()){

echo $_row[3].'<br>';

}

(2)、打印出某一列的所有值:(关联数组)

$_assoc = $_result->fetch_assoc();

echo $_assoc['tg_username'];

//遍历出所有值:

while($_assoc = $_result->fetch_assoc()){

echo $_assoc['tg_username'].'<br>';

} (3)、打印出某一列的所有值:(关联+索引)

$_array = $_result->fetch_array(); echo $_array['tg_username'];

echo $_array[3];

//风筝

(4)、打印出某一列的所有值:(OOP对象)

$_object = $_result->fetch_object();

echo $_obj->tg_username;

//遍历某列所有值

while($_object = $_result->fetch_object()){

echo $_object->tg_username;//对象用->访问字段

}

3、确定所选择的行和受影响的行

通常希望能够确定 SELECT 查询返回的行数 , 或者受 INSERT 、 UPDATE 或 DELET 查询

影响的行数。我们可以使用 num_rows 和 affected_rows 两个属性 $_sql = "select * from tg_user limit 0,10";

$_result = $_mysqli->query($_sql);

echo $_result->num_rows;//分页的时候可以查询总的页数

//10

// 当使用查询时 , 想了解 INSERT 、 UPDATE 、 DELETE 查询时影响的行 数,可以使用 affected_rows; 注意,它是 $_mysqli 下的属性

echo $_mysqli ->affected_rows; //这里没有括号

4、移动指针的操作和获取字段当你并不想从第一条数据开始获取 ,

或者并不想从第一个字段获取 , 你可以使用数据指

针移动或者字段指针移动的方式调整到恰当的位置 。

当然 , 你还可以获取字段的名称及其相关的属性

// 计算有多少条字段

echo $_reslut ->field_count;

// 获取一个字段的名称

$_field = $_reslut ->fetch_field();

echo $_field ->name;

//取得所有字段名称:

$_rows=$_result->fetch_fields();

foreach($_rows as $_field){

echo $_field->name."<br>";

}

//取得所有字段名称:(等同上边一个)

while (!! $_field = $_reslut ->fetch_field()) {

echo $_field ->name. '<br />' ;

}

// 获取一个字段的名称及相关信息

print_r( $_reslut ->fetch_fields());

// 移动数据指针

//将指针移到第10行的字段的下标为3的值上

$_result-> data_seek(9);//第10行

$_row = $_result->fetch_row();

echo $_row[3];//下标为3的字段

// 移动字段指针(输出的是字段的名称)

$_reslut ->field_seek( 2 );

5、执行多条 SQL 语句

有的时候 , 我们需要在一张页面上同时执行多条 SQL 语句 , 之前的方法就是分别创建多

个结果集然后使用。但这样资源消耗很大,也不利于管理。 PHP 提供了执行多条 SQL 语句

的方法 $_mysqli->multi_query();

$_sql.="UPDATE tg_article SET tg_username='呵呵呵' WHERE tg_id=1;"; $_sql.="UPDATE tg_flower SET tg_fromuser='呵呵呵' WHERE tg_id=1;"; $_sql.="UPDATE tg_friend SET tg_fromuser='呵呵呵' WHERE tg_id=1";//注意分号

$_mysqli->multi_query($_sql);

//mysqli执行语句中,假如有二条执行语句,如果第一条有误,那么二条都不会执行

//如果第一条正确,第二条有误,那么会正常执行第一条,第二条不执行

查询多条语句的结果集,判断哪条有误给出提示:

//创建三条选择语句

$_sql.="SELECT * FROM tg_article;";

$_sql.="SELECT * FROM tg_flower;";

$_sql.="SELECT * FROM tg_friend";

//$_mysqli->multi_query相当于执行单条语句

$_mysqli->query()

if ($_mysqli->multi_query($_sql)) {//在执行多条语句前提下获取判断下面结果

//获取当前的结果集

$_result = $_mysqli->store_result();

print_r($_result->fetch_row());

//第二条

//将结果集的指针移到下一条

$_mysqli->next_result();//下一条结果

$_result = $_mysqli->store_result();

//$_result如果是true返回0

if (!$_result) {

echo '第二条SQL语句有误,请检查!';

exit();

}

print_r($_result->fetch_row());

//第三条

$_mysqli->next_result();

$_result = $_mysqli->store_result();

if (!$_result) {

echo '第三条SQL语句有误,请检查!';

exit();

}

print_r($_result->fetch_row());

} else {

echo '第一条SQL语句有误,请检查!';

exit();

}

6、 执行数据库事务

事务 (transaction) 是作为整个一个单元的一组有序的数据库操作 。 如果一组中的所有操

作都成功 , 则认为事务成功 , 即使只有一个失败操作 , 事务也不成功 。 如果所有操作成功完

成 , 事务则提交 (commit) , 其修改将作用于所有其他数据库进程 。 如果一个操作失败 , 则事

务将回滚 (rollback) ,该事务所有操作的影响都将取消。

首先 , 您的 MySQL 是 InnoDB 或 BDB 引擎的一种 , 一般来说 , 你安装了 AppServ 的集成

包 , 你选择 InnoDB 的引擎的数据库即可 。 如果你建立的表不是 InnoDB , 可以在 phpmyadmin

里修改。

$_sql.="UPDATE tg_flower SET tg_flower=tg_flower+10 WHERE tg_id=1;"; $_sql.="UPDATE tg_friend SET tg_state=tg_state-10 WHERE tg_id=1"; //首先关闭自动提交,否则无效

$_mysqli->autocommit(false);

if($_mysqli->multi_query($_sql)){

//获取第一条影响的行数

$_succeed1 = $_mysqli->affected_rows==1 ?true : false;

$_mysqli->next_result();

$_succeed2 = $_mysqli->affected_rows==1 ?true : false;

//判断是否两条都执行为true;

if($_succeed1 && $_succeed2){

$_mysqli->commit();

echo '交易成功';

exit();

}else{

$_mysqli->rollback();

echo '交易失败,回滚mysql原始';

exit();

}

}else{

echo '第一条语句有误,交易失败';

exit();

}

//最后开启自动提交

$_mysqli->autocommit(true);

在多张表中操作数据库:

$_sql = "SELECT

m.id,m.admin_user,m.level,m.login_count,m.last_ip,m.reg_time FROM cms_manage as m,cms_level as n where m.level=n.level";

$_sql = "SELECT

m.id,

m.admin_user,

m.login_count,

m.last_ip,

m.last_time,

l.level_name

FROM

cms_manage m,

cms_level l

WHERE

l.level = m.level

ORDER BY

m.id ASC

LIMIT

0,10";

$_result->fetch_row()---显示结果集中的一条记录内容,对一条数据进行操作 和count(*)一起使用

$_result->num_rows; ---结果集中的总条数,分页的时候可以查询总的页数

$_mysqli ->affected_rows --执行sql语句后所影响的行数

//获取管理员总记录分页的时候可以使用 public function getManageTotal(){

$_db = DB::getDB();

$_sql = "select count(*) from

cms_manage";

$_result = $_db->query($_sql);

$_total = $_result->fetch_row();

} DB::unDB($_result,$_db); return $_total;

更多相关推荐:
mysql注入学习必看(新鸟请看)

mysql注入学习必看新鸟请看今天翻贴子发现问相同注入问题问得很多beach至少回答了好几遍了所以简单整理下供新人学习先看mysql版本5之前还是之后以下来自beach总结mysql4x之前的版本不支持unio...

mysql注入介绍,和跳过防注入

s01mysql注入简单过程最开始我们要找到有sql注入的网站在谷歌输入sitesitecominurlphpid如果没有结果试试sitesitecominurlphp如果还是没有试试以下的inurlartic...

mysql注入的作用

mysql注入的作用mysql数据库是一种开放源代码的关系型数据库管理系统rdbmsmysql数据库系统使用最常用的数据库管理语言结构化查询语言sql进行数据库管理mysql注入注射中loadfile函数在获得...

手工注入mysql

手工MSSQL注入常用SQL语句来源转载作者佚名时间20xx0818215951andexistsselectfromsysobjects判断是否是MSSQLandexistsselectfromtableNa...

Mysql注入Tips v0.1

Mysql注入Tipsv01MySQL注入技巧经验总结nixByBeach可能不太全想起多少写多少吧以后想起来再补上注入时URL后加的SQL语句里的空格我们还可以用或代替有时效果不一样的mysql里空格和相等是...

Php+Mysql注入专题

PhpMysql注入专题Php注入攻击是现今最流行的攻击方式依靠它强大的灵活性吸引了广大黑迷在上一期的php安全与注射专题中林linx主要讲述了php程序的各种漏洞也讲到了phpmysql注入的问题可是讲的注入...

mysql总结

MYSQL命令大全20xx年06月10日星期三上午1144常见的MySQL命令大全20xx06091759一连接MySQL格式mysqlh主机地址u用户名p用户密码1例1连接到本机上的MYSQL首先在打开DOS...

Mysql学习总结

Mysql学习总结一mysql数据库安装1安装前的准备Mysql安装文件包2安装步骤首先解压mysql4023winnoinstallzip至c并将目录名改为cmysql然后修改系统环境变量在控制面板gt系统g...

mysql 5.0存储过程学习总结

mysql50存储过程学习总结一创建存储过程1基本语法createprocedurespnamebeginend2参数传递二调用存储过程1基本语法callspname注意存储过程名称后面必须加括号哪怕该存储过程...

MySql连接字符串总结

MySql连接字符串总结一MySQLConnectorODBC250MyODBC250连接方式1本地数据库连接以下是语法格式DrivermySQLServerlocalhostOption16834Databa...

关于mysql提权方法总结

关于mysql提权方法总结mysql是一种开放源代码的关系型数据库管理系统rdbmsmysql数据库系统使用最常用的数据库管理语言结构化查询语言sql进行数据库管理那么对于mysql提权的方法站长们是否了解呢专...

MySql常用命令总结

MySql常用命令总结MySQL常用操作基本操作以下都是MySQL50下测试通过首先说明下记住在每个命令结束时加上分号1导出整个数据库mysqldumpu用户名pdefaultcharactersetlatin...

mysql注入总结(15篇)