我想使用PHP脚本将大约20个变量传递给mysql表。有没有比做更好的方式:
$var1= preg_replace('/[^\w\.\-\& ]/', '', $_GET["var1"]);
$var2= preg_replace('/[^\w\.\-\& ]/', '',($_GET["var2"]));
$var3= preg_replace('/[^\w\.\-\& ]/', '',($_GET["var3"]));
等
然后有一大堆代码:
$query = "INSERT INTO tbl_users (var1, var2, var3 etc.) VALUES('$var1', '$var2', '$var3' etc.)"
提前致谢, Sondar
答案 0 :(得分:1)
不要担心字段数量,20不大。
但是,您应该使用数据库提供的转义函数。如果您使用的是mysql_ *函数,则可以使用mysql_real_escape_string
如果您使用PDO(推荐),请使用绑定参数。
答案 1 :(得分:0)
$a = $_GET;
foreach($i = 0;$i<count($a); $i++) {
$b[] = preg_replace('/[^\w.-\& ]/', '', $a[$i]);
}
这应循环遍历所有post变量,使用表达式验证它们并将其转储到$ b。但我不知道如何缩短$query = "INSERT INTO tbl_users (var1, var2, var3 etc.) VALUES('$var1', '$var2', '$var3' etc.)"
答案 2 :(得分:0)
$get_values = array();
foreach($_GET as $name=>$val) {
$get_values[$name] = preg_replace('/[^\w\.\-\& ]/', '', $val);
}
$query = 'INSERT INTO tbl_users ('.implode(', ', array_keys($get_values)).') VALUES('.implode(', ', $get_values).')';
答案 3 :(得分:0)
可能有很多方法。这个将假设您的$_GET
变量名称和表字段名称完全匹配。
$var_list = array('var1', 'var2', 'var3'); // as many as you want
// this filters GET to be just your variables
$params = array_intersect_key($_GET, array_fill_keys($var_list, ''));
$query = "INSERT INTO tbl_users (" . implode(',', array_keys($params)) . ") VALUES (";
foreach ($params as $val) {
$query .= mysql_real_escape_string($val);
}
$query .= ")";
编辑:
如评论中所述,您需要注意这里的密钥。将密钥粘贴到查询中的一般方法就像这样非常糟糕,如果你不像我在这里那样过滤它们。如果不是array_keys($params)
而是类似array_keys($_GET)
,那么你就可以大张旗鼓地注入SQL了。确保您正在清理输入,键和值。
答案 4 :(得分:0)
正如大家所述,简化它的显而易见的方法是使用帮助程序代码。我用for example解决了这两个问题:
foreach ($_GET->keys() as $id) {
$var[$id] = $_GET->text[$id];
}
$_GET->text["var12"]
自动应用正则表达式过滤器。
或者为了插入而不用担心手动SQL转义,建议使用预准备语句。但是你仍然需要特殊的支持来插入行:
db("INSERT INTO users (:?) VALUES (??)", array_keys($var),
array_values($var));
使用简单的ORM来避免手动SQL手工制作。 Idiorm很不错。