脚本宝典收集整理的这篇文章主要介绍了php – 安全地使用预准备语句来查询数据库,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$field = "name"; $value = "joe"; function selectquery($field,$value) { global $dbcon; $select = $dbcon->PRepare('SELECT * From @R_777_2187@er1 WHERE :field = :value'); if($select->execute(array(':field' => $field,':value' => $value))); { $row = $select->fetch(); for ($i=0; $i<3; $i++) { echo $row[$i]."\n"; } } }
如何在不允许注入攻击的情况下允许更改表/字段/值? MysqL_real_escaPE_string()似乎有点像倒退了一步.有任何想法吗?
为什么不将它指定为函数的参数?与用户提供的数据不同,字段是有限的,定义良好且不经常更改.如在
selectquery('name',$value);
并有你的查询
$field = "name"; $value = "joe"; function selectquery($field,$value) { global $dbcon; $select=$dbcon->prepare("SELECT * From tester1 WHERE $field = :value"); if($select->execute(array(':value' => $value))); //etcetera
由于您自己为函数调用提供字段名称,因此除非您担心自己会使用sql注入攻击自己,否则这是安全的.
如果由于某些奇怪的原因,该字段的名称来自用户输入,您可以创建一个允许字段数组.这样,您就可以安全地进行注射,因为这些值只能来自您的数组.我不知道为什么字段名称来自用户输入,因此不受信任,除非您正在制作API?另外,可能有更好的方法来实现目标.
$field = "name"; $value = "joe"; $Allowed_fields=array('name','other_name','sandwich'); function selectquery($field_name,$value) { global $dbcon,$allowed_fields; if(!in_array($field_name,$allowed_fields)){ return false; } else{ $field=$field_name; } $select=$dbcon->prepare("SELECT * FROM tester1 WHERE $field = :value"); if($select->execute(array(':value' => $value))); //etcetera
以上是脚本宝典为你收集整理的php – 安全地使用预准备语句来查询数据库全部内容,希望文章能够帮你解决php – 安全地使用预准备语句来查询数据库所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。