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

seai 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();
}
?>
...全文
129 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
seai 2010-07-09
  • 打赏
  • 举报
回复
$v=123;
$sql="set @v=$v;select * from my_table where col=@v;"

或许我写成这样就看的更明白了
seai 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;"
一样。
既然没有外部数据传入,当然也就没有注入风险了
seai 2010-07-09
  • 打赏
  • 举报
回复
顶起来
seai 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]
有注入风险

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

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

这样的查询是否安全,有没有注入危险?
Dleno 2010-07-08
  • 打赏
  • 举报
回复
没用过你这个mysqli类

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧