为了账号安全,请及时绑定邮箱和手机立即绑定

这个函数中的$i一直是个数字啊,switch并不起什么作用啊。

有没有小伙伴帮忙看一下?

正在回答

3 回答

是的 ,这段代码是有问题的 不仅替换语句的那个的地方有问题,switch的参数有问题,而且$args此时被array_shift移空了应该是空数组、那下面过滤的$args[$i]从何而来呢

可能老师只是想演示一下底层是怎么来绑定参数的原理吧,按这个原来改改代码其实是可以的

2 回复 有任何疑惑可以回复我~

可视区的宽和高,会随着窗口的大小变化

0 回复 有任何疑惑可以回复我~
$mysqli = new Mysqli('127.0.0.1', 'root', 'root', 'tst');
$name = $_GET['name'] ?? '';
$password = $_GET['password'] ?? '';
function bind_param($sql, $format)
{
    $args = func_get_args();
    $prepare_sql = array_shift($args);
    $format = array_shift($args);

    if (strlen($format) > count($args)) {
        die('缺少参数');
    }
    $i = 0;
    while ($i < strlen($format)) {
        switch ($format[$i]) {
            case 's':
                $args[$i] = "'" . addslashes($args[$i]) . "'";
                break;
            case 'i':
                $args[$i] = intval($args[$i]);
                break;
            default:
                break;
        }
        //这段代码也有问题,str_replace 会替换所有的问号
        $prepare_sql = preg_replace('/\?/',  $args[$i], $prepare_sql, 1);
        $i++;
    }
    return $prepare_sql;
}

echo '<pre>';
$sql = "select name from user where  name=? and password=?";
echo $sql;
echo '<br>';
$after_prepare = bind_param($sql, 'ss', $name, $password);
echo 'after prepare:' . $after_prepare;
echo '<br>';
$res = $mysqli->query($after_prepare);
$result = $res->fetch_all();
if ($result) {
    print('hi ');
    print_r($result);
} else {
    print('hack failed');
}
echo '</pre>';

注意 

需要 php7以上,或者自己改代码


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这个函数中的$i一直是个数字啊,switch并不起什么作用啊。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信