php prepare
详见 https://stackoverflow.com/questions/134099/are-pdo-prepared-statements-sufficient-to-prevent-sql-injection/12202218#12202218
php pdo prepare真的能防止sql injection吗, 这里
php使用pdo 连接mysql , 会使用prepare预处理, 也就是将 除去具体查询值的SQL语句先送给mysql, 然后再把值发送给mysql, 能够避免sql注入
pdo 有一个属性 PDO::ATTR_EMULATE_PREPARES, 为true, 即为php本地 模拟这个prepare, 其时什么也没做,execute时把完整sql 发送给sql, 这时如果是gbk,很容易SQL注入
为false时,先把预处理发送给mysql, execute时, 再把值发送给mysql
当 PDO::ATTR_EMULATE_PREPARES 为 true时

当PDO::ATTR_EMULATE_PREPARES 为 false时
先发送 select * from table_uid_1 where k = ?

再发送103489 这个查询值

如果加上limit
public function list() {
$sql = "select * from " . $this->table . "_1 where k = :id limit :limit";
$result = $this->pdo->prepare($sql);
$id = ;
$result->bindParam(':id', $id);
$result->bindValue(':limit', );
$result->execute();
$list = $result->fetchAll(\PDO::FETCH_ASSOC);
return $list;
}
当 PDO::ATTR_EMULATE_PREPARES 为 true时, sql报错

执行的语句是 select * from table_uid_1 where k = '103489' limit '0'
解决方法是 bindValue时, 标注下类型, 即
public function list() {
$sql = "select * from " . $this->table . "_1 where k = :id limit :limit";
$result = $this->pdo->prepare($sql);
$id = ;
$result->bindParam(':id', $id);
$result->bindValue(':limit', , \PDO::PARAM_INT);
$result->execute();
$list = $result->fetchAll(\PDO::FETCH_ASSOC);
return $list;
}
或者 设置 PDO::ATTR_EMULATE_PREPARES 为 false

传递 值

tcpdump抓取数据
tcpdump tcp port 3318 -w /tmp/target.ca
wireshark 分析tcpdump出来的包 分析
过滤条件:
在wireshark的过滤条件里输入tcp.port==3306 && mysql,然后回车,这样就能只显示mysql类型的包。

php prepare的更多相关文章
- Looper.prepare()和Looper.loop()
什么时候需要 Looper Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建 ...
- java.lang.NoSuchMethodException: org.apache.ibatis.executor.statement.StatementHandler.prepare(java.sql.Connection)
此错误是由于版本造成的,如果使用mybatis3.4版本以上,配置拦截器规则应增加Intger @Intercepts({ @Signature( type= StatementHandler.cla ...
- php+mysql预查询prepare 与普通查询的性能对比
prepare可以解决大访问量的网站给数据库服务器所带来的负载和开销,本文章通过实例向大家介绍预查询prepare与普通查询的性能对比,需要的朋友可以参考一下. 实例代码如下: <?php cl ...
- 在子线程中new Handler报错--Can't create handler inside thread that has not called Looper.prepare()
在子线程中new一个Handler为什么会报以下错误? java.lang.RuntimeException: Can't create handler inside thread that has ...
- PerconaXtraBackup --全备增备prepare restore
Xtrabackup Xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下: • xtrabackup只能备份innodb和xtradb引擎表,而不 ...
- 1117Mysql prepare预处理语句
转自http://www.jb51.net/article/81378.htm 综述:一般用来拼凑SQL然后执行 MySQL 5.1对服务器一方的预制语句提供支持.如果您使用合适的客户端编程界面,则这 ...
- DB2 for Z/os Statement prepare
The PREPARE statement creates an executable SQL statement from a string form of the statement. The c ...
- Android 线程更新UI报错 : Can't create handler inside thread that has not called Looper.prepare()
MainActivity中有一个按钮,绑定了save方法 public void save(View view) { String title = titleText.getText().toStri ...
- Mariadb 10.1 joiner节点加入报错WSREP: Failed to prepare for incremental state transfer
Mariadb 10.1 galera cluster 集群joiner 节点加入集群 会出现这种报错,导致mysql一直点点点,这里我贴出报错.2016年04月19日13:34:58 2016-04 ...
- mysql之预处理语句prepare、execute、deallocate
预制语句的SQL语法基于三个SQL语句: PREPARE stmt_name FROM preparable_stmt; EXECUTE stmt_name [USING @var_name [, @ ...
随机推荐
- react native 触摸Touchable***的区别(TouchableWithoutFeedback、TouchableOpacity、TouchableHighlight、TouchableNativeFeedback)
一.问题背景: react native的跨平台开发没有button的概念,而是使用touchable系列实现点击触发效果. 而touchable系列就有四个之多,而且相互之间仍有较大差别,这就给我们 ...
- for 续7
----------siwuxie095 for 中的变量: FOR 变量参照的替换已被增强.您现在可以使用下列选项语法: ~I - 删除任何引号(" ...
- 完全使用ASP.NET实现的省市区级联效果
本功能特点:下级的显示和数据的加载都是由上一级下拉框的SelectedIndexChanged触发的,在上级下拉框没有选择之前,下级不会出现,用户体验比较好.无刷新方面,采用AJAX技术,在数据选择的 ...
- 6-关于#include<bits/stdc++.h>
万能头文件#include<bits/stdc++.h> (转载) 最近在打cf时赛后翻阅别人的代码总是会发现一个陌生而奇怪的头文件#include<bits/stdc++.h& ...
- centos6.5下使用yum完美搭建LNMP环境(php5.6)
准备工作 配置防火墙,开启80端口.3306端口删除原有的 iptables , 添加合适的配置 rm -rf /etc/sysconfig/iptables vi /etc/sysconfig/ip ...
- python多线程编程5: 条件变量同步-乾颐堂
互斥锁是最简单的线程同步机制,Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还 ...
- popupWindow自适应大小
// popupWindow自适应大小 popupWindow = new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP ...
- mvc数组绑定-jquery ajax
var list=[];//数组 list[0]=1001; list[1]=1002; list[1]=1003; var json_data = { selected: list}; $.ajax ...
- 超级详细的解决方法 (CentOS7) :永久修改 mysql read-only 问题 could not retrieve transation read-only status server
一.查看mysql的事物隔离级别 SHOW VARIABLES LIKE '%iso%'; 二.临时修改事物隔离级别 SET GLOBAL tx_isolation='READ-COMMITTED'; ...
- 基于微软XAML技术的前端开发方法
使用XAML技术的平台目前包括WPF,Silverlight,Windows8等平台,未来的Windows10统一Windows App也使用XAML技术. 前端开发指通过可视化集成开发环境进行用户界 ...