设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
PHP
›
请问如何在 PHP 里用预编译的 SQL 语句
返回列表
查看:
1741
|
回复:
6
请问如何在 PHP 里用预编译的 SQL 语句
[复制链接]
jhuangjiahua
jhuangjiahua
当前离线
积分
9502
IP卡
狗仔卡
发表于 2005-11-27 23:04:55
|
显示全部楼层
|
阅读模式
前几天看同学写的代码
居然完全是字符串连接弄出的 SQL 语句
感觉不太可靠
比如要是传入的字符里有引号应该就会出问题了
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
upandup
upandup
当前离线
积分
106
IP卡
狗仔卡
发表于 2005-11-28 01:20:51
|
显示全部楼层
你是说入库的字符串有引号吗
默认magic_quotes_gpc
或addslashes($str)
自动转义了。
回复
支持
反对
使用道具
举报
显身卡
mikespook
mikespook
当前离线
积分
172
IP卡
狗仔卡
发表于 2005-11-28 09:21:30
|
显示全部楼层
function _doSecurity()
{
$_GET = $this->_filter($_GET);
$_POST = $this->_filter($_POST);
$_COOKIE = $this->_filter($_COOKIE);
$_REQUEST = $this->_filter($_REQUEST);
}
function _filter($arr)
{
$arrMask = array(
'PHPSESSID',
);
if (is_array($arr))
{
foreach($arr as $key => $item)
{
if (!in_array($key, $arrMask))
{
$arr[$key] = $this->_filter($item);
}
}
}
else
{
if (!get_magic_quotes_gpc())
{
$arr = addslashes($arr);
}
}
return $arr;
}
这个我一个MVC框架的页面处理类中的内部方法~~~不过phpclasses上可能会有构造sql语句的数据库操作类~~~用类似adodb的rs那样的方式add,update
回复
支持
反对
使用道具
举报
显身卡
jhuangjiahua
jhuangjiahua
当前离线
积分
9502
IP卡
狗仔卡
楼主
|
发表于 2005-11-28 18:24:57
|
显示全部楼层
不想要 字符串连接 的原因 一是安全考虑,还有就是执行效率
google 到了一些东西
将 SQL 语句书写成类似
- "select col1, col2 from tbname where col1=? and col3=?"
- "insert into tbname values(?,?,?)"
- "update tbname set col1=? where col2=?"
- "delete from tbname where col3=?"
执行用类似
SQLBindParameter()
execute s1 using <var1>, <var2>
有些像 Python 里的作法了
回复
支持
反对
使用道具
举报
显身卡
cg111
cg111
当前离线
积分
217
IP卡
狗仔卡
发表于 2005-11-29 01:22:31
|
显示全部楼层
花花,可以Z在数据库里编制一个储存过程,然后用php执行储存过程的。
回复
支持
反对
使用道具
举报
显身卡
nbxmedia
nbxmedia
当前离线
积分
3904
IP卡
狗仔卡
发表于 2005-11-29 09:20:28
|
显示全部楼层
PDO和ADODB都有类似功能
而且字符串连接速度也差不了多少.........
回复
支持
反对
使用道具
举报
显身卡
mikespook
mikespook
当前离线
积分
172
IP卡
狗仔卡
发表于 2005-11-30 12:01:29
|
显示全部楼层
我用的是pear里的db,可以构造
update table1 set f = '?' where id = '?'然后传递一个数组~~
array(
array('a', 1),
array('b', 2),
array('c', 3),
)
不过这种构造方式依然还是可以做sql injection。其实外部数据过滤,我觉得不论是python还是php都不能少~~除非真的像win下面那个ADODB.Recordset在每次内部生成sql的时候都验证每个字段的类型与值是不是合法~~~
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表