php访问mysql数据库,如何按名称绑定参数?只支持匿名绑定吗?

microhuang 摩贝(上海)生物科技有限公司 技术总监/研发总监  2010-07-08 08:14:48
<?php
$mysqli=new mysqli("localhost","root","123","books");
if($stmt=$mysqli->prepare("SELECT id FROM computers WHERE id LIKE ?"))
{
$stmt->bind_param("s",$code); //这里只是匿名绑定啊。。。
$code='29';
$stmt->execute();
$stmt->bind_result($col1);
while($stmt->fetch()){
printf("%s ",$col1);
}
$stmt->close();
$mysqli->close();
}
?>
...全文
78 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
microhuang 2010-07-09
$v=123;
$sql="set @v=$v;select * from my_table where col=@v;"

或许我写成这样就看的更明白了
回复
microhuang 2010-07-09
[Quote=引用 5 楼 xuzuning 的回复:]

1、
mysqli 只能匿名,按顺序绑定
pdo 就可以按名称绑定了
你使用 mysqli 就不如使用 pdo 了

2、
不存在注入风险
$sql="set @v=123;select * from my_table where col=@v;"

$sql="select * from my_table where col=123;"
一样。
既然没有外部数据传入,当……
[/Quote]

不好意思,忘了说名@v的值123来自外部。即根据外部获取的参数,最终构造出类似的语句提交数据库,有没有注入的风险,能否给个具体实例进行测试?
回复
xuzuning 2010-07-09
1、
mysqli 只能匿名,按顺序绑定
pdo 就可以按名称绑定了
你使用 mysqli 就不如使用 pdo 了

2、
不存在注入风险
$sql="set @v=123;select * from my_table where col=@v;"

$sql="select * from my_table where col=123;"
一样。
既然没有外部数据传入,当然也就没有注入风险了
回复
microhuang 2010-07-09
顶起来
回复
microhuang 2010-07-08
[Quote=引用 3 楼 cunningboy 的回复:]

引用 2 楼 seai 的回复:

接上面,
补充另外问题

$sql="set @v=123;select * from my_table where col=@v;"
mysqli_multi_query($handle, $sql);

这样的查询是否安全,有没有注入危险?

有注入风险

你的第一种方式比较安全,它是按顺序绑定。
你的匿名绑定是什么意思?
[/Quote]


就是按顺序绑定,不能按名称绑定。oracle/sqlserver都能按名称绑定。

我做了个测试,觉得没有注入风险。

$sql="set @v='123;select version()';select * from my_table where col=@v;";

直接拿《set @v='123;select version()';select * from my_table where col=@v;》到mysql里执行,select versoin()不回会起作用。

能够给一个危险的事例语句吗?
回复
CunningBoy 2010-07-08
[Quote=引用 2 楼 seai 的回复:]

接上面,
补充另外问题

$sql="set @v=123;select * from my_table where col=@v;"
mysqli_multi_query($handle, $sql);

这样的查询是否安全,有没有注入危险?
[/Quote]
有注入风险

你的第一种方式比较安全,它是按顺序绑定。
你的匿名绑定是什么意思?
回复
microhuang 2010-07-08
接上面,
补充另外问题

$sql="set @v=123;select * from my_table where col=@v;"
mysqli_multi_query($handle, $sql);

这样的查询是否安全,有没有注入危险?
回复
Dleno 2010-07-08
没用过你这个mysqli类
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告