Php 如何检查所有值是仅为文本还是仅为整数?

Php 如何检查所有值是仅为文本还是仅为整数?,php,Php,我试图通过著名的1或1技术阻止url的sql注入,使用get变量检查id是否仅为字符串ex:page.php?id=abc或整数ex:page.php?id=12 所以,我用is_string函数检查字符串,用is_numeric函数检查数字,但它只检查第一个字母。因此,如果?id=ab345,它仍将返回true 那么,有没有办法检查所有的值是否都是字符串,并且所有的值都是整数 这是链接: 此页面获取id并进行数据库查询 ifisset$_GET['id']{**,如果id是纯文本**}{Pe

我试图通过著名的1或1技术阻止url的sql注入,使用get变量检查id是否仅为字符串ex:page.php?id=abc或整数ex:page.php?id=12

所以,我用is_string函数检查字符串,用is_numeric函数检查数字,但它只检查第一个字母。因此,如果?id=ab345,它仍将返回true

那么,有没有办法检查所有的值是否都是字符串,并且所有的值都是整数

这是链接:

此页面获取id并进行数据库查询 ifisset$_GET['id']{**,如果id是纯文本**}{Perform code} 我缺少的是介于****

//请求之间的内容:\u GET['id']=ab345 var_dumpis_numeric$_GET['id'];//错误的 var_dumpis_string$_GET['id'];//符合事实的

//请求:_GET['id']=345 var_dumpis_numeric$_GET['id'];//符合事实的 var_dumpis_string$_GET['id'];//错误的
PHP中的所有这些输入默认为字符串。如果您需要更具体的值,您可以使用PHP的筛选和验证功能,例如查看默认可用的筛选:

您的问题的许多可能答案之一是

$id = isset(isset($_GET['id'])) ? (int) $_GET['id'] : 0;    //force to integer, or 0 if not set
这将强制id的值为整数,如果URL中没有设置,则强制id的值为零。别忘了讨厌的脚本小子们,他们会手动更改URL以尝试破坏您的站点


但是。。。老实说我有点担心,您甚至认为这将防止SQL注入攻击。我强烈建议您多花点时间进一步阅读这个主题,这可能就是您的问题被否决的原因。

您的代码是错误的:var_dumpis_numeric'abc123'=False对于id,您可以使用$id=int$_GET['id'];。除了数字之外,其他任何东西都无法通过。TextOnly是为了确保没有人可以通过设置类似于1或1的值来修改page.php?id=MyProfile部分中的MyProfile。因此,我需要PHP来确保,id之后的内容都是纯文本这不是清理db1或db1数据的最佳\标准方法也是纯文本。不管怎样,我给你添加了一个答案,它应该会给你一些指导,你可以用它过滤所有的$\u,扩展支持它。除此之外,你需要的是准备好的陈述。这很好地阻止了这种SQL注入。谢谢你的回答,但是我能问你var_dump应该做什么吗?我以前从未使用过该函数。var_dump-转储有关变量引用的信息: