这个函数中的$i一直是个数字啊,switch并不起什么作用啊。
有没有小伙伴帮忙看一下?
有没有小伙伴帮忙看一下?
2018-01-23
$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以上,或者自己改代码
举报