php intval 函数

不论什么类型 假如是数字,便前往数字,假如没有是数字便往归0 
正在PHP顶用$_GET['id']的时分就能够这样来一个转换 ...太佳了 

PHP代码 

$id = intval($_GET['id']);


echo intval(42); // 42 
echo intval(4.2); // 4 
echo intval('42'); // 42 
echo intval('+42'); // 42 
echo intval('-42'); // -42 
echo intval(042); // 34 
echo intval('042'); // 42 
echo intval(1e10); // 1410065408 
echo intval('1e10'); // 1 
echo intval(0x1A); // 26 
echo intval(42000000); // 42000000 
echo intval(420000000000000000000); // 0 
echo intval('420000000000000000000'); // 2147483647 
echo intval(42, 8); // 42 
echo intval('42', 8); // 34 
?> 
intval最常用的是在程序中功滤入进数据库的变量,将其转换为整型,避免SQL注进攻打的发生 
但是使用没有该的话则会止不到检讨的做用,下里便联合一个真例来阐明那个答题 
海内某个CMS体系,经由ZEND加稀了,解稀后某白件代码如下: 
  1. $id = isset( $_GET['id'] ) ? $_GET['id'] : 0;
  2. if ( intval( $id ) )
  3. {
  4. $sql = "SELECT url FROM ".$tablepre."feed WHERE id={$id} AND uploader='{$SESSION['uid']}'";


代码很简略,获与GET来的id用intval函数断定,假如是整型则带进数据库查询, 新网科技 ,望似逻辑上出有什么答题,但实践上那段代码出有止就任何的check做用,为什么呢?瞅如下足原: 
  1. <?
  2. $var="20070601";
  3. if (intval($var))
  4. echo "it's safe";
  5. echo '$var='.$var;
  6. echo "<br>";
  7. $var1="1 union select 1,1,1 from admin";
  8. if (intval($var1))
  9. echo "it's safe too";
  10. echo '$var1='.$var1;
  11. ?>


运转以上足原能够望到,两个断定的成果皆是safe的,但实践上只要$var是平安的$var1变质后已经附带的有额定的SQL查询语句了,那么intval是如何判别的呢?这就须要瞅intval函数正在PHP中是如何完成的,代码如下: 
  1. PHP_FUNCTION(intval)
  2. {
  3. zval **num, **arg_base;
  4. int base;
  5. switch (ZEND_NUM_ARGS()) {
  6. case 1:
  7. if (zend_get_parameters_ex(1, &num) == FAILURE) {
  8. WRONG_PARAM_COUNT;
  9. }
  10. base = 10;
  11. break;
  12. case 2:
  13. if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
  14. WRONG_PARAM_COUNT;
  15. }
  16. convert_to_long_ex(arg_base);
  17. base = Z_LVAL_PP(arg_base);
  18. break;
  19. default:
  20. WRONG_PARAM_COUNT;
  21. }
  22. RETVAL_ZVAL(*num, 1, 0);
  23. convert_to_long_base(return_value, base);
  24. }


intval函数只断定参数的第一个字符能否为整型,那样假如搁正在if中,只需知足变质第一个字符为整型,则前往值为ture, 400电话 ,所以道用if来判别intval后的变质是没有平安的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值