首先,我必须说我是一个全新手,我真的有使用PHP的经验。
这是我的问题。我有一个传感器,它以下列形式将数据发送到mysql数据库:
http://192.168.1.2/add.php?i=mit=0106,22:5113/07/2016,liv=175cm,livp=000%,b=12.0V,t=36;
现在我可以在我的mysql表中显示它:
"mit=0106,22:5113/07/2016,liv=175cm,livp=000%,b=12.0V,t=36;"
但我想分别显示每个参数。
您知道如何更改"&"到","?
理想的解决方案是将url命令更改为此表单:
http://192.168.1.2/add.php?i=mit=0106&22:5113/07/2016&liv=175cm&livp=000%&b=12.0V&t=36;
但不幸的是我可以重新编程传感器,所以我需要更改"&"到","。
答案 0 :(得分:3)
arg_separator.input
是您正在寻找的配置指令:
arg_separator.input string
PHP用于将输入URL解析为变量的分隔符列表。注意:
该指令中的每个字符都被视为分隔符!
请注意设置模式是PHP_INI_PERDIR,这意味着它可以在php.ini,.htaccess,httpd.conf或.user.ini中设置(自PHP 5.3起)" (http://php.net/manual/en/configuration.changes.modes.php)
如果您无法更改此设置,您可能会查看整个查询字符串(请参阅$ _SERVER变量),并使用explode或类似内容将其拆分为逗号。
答案 1 :(得分:1)
如果我做对了,你必须将该字符串中的所有name=value
对存储到数据库表中的不同列中。
在这种情况下,您不能使用explode(),因为第一个值包含逗号。
假设您已经使用所需的数据类型创建了名为mit
,liv
,livp
,b
和t
的列,并且您的字符串是在进入数据库之前进行双重检查以避免SQL注入,您可以执行以下操作:
# your input string
$input = "mit=0106,22:5113/07/2016,liv=175cm,livp=000%,b=12.0V,t=36;";
# loop through it and determine all name=value pairs
while (strlen($input)>2) {
preg_match ('/([a-z]+)\=(.*?)(?:,[a-z]+=|;)/', $input, $m);
# store names here
$d1[] = "'{$m[1]}'";
# and values here
$d2[] = "'{$m[2]}'";
$input = substr($input, strlen($m[1]) + strlen($m[2]) + 2);
}
# join arrays into string
$d1 = join(",", $d1);
$d2 = join(",", $d2);
# and put them into query
$sql = "INSERT INTO mytable ($d1) VALUES ($d2);";
echo $sql;
这将打印出这样的查询
INSERT INTO mytable ('mit','liv','livp','b','t')
VALUES ('0106,22:5113/07/2016','175cm','000%','12.0V','36');
while
循环如何运作?
它使用$input
作为参数,查找name=value
后跟另一个name=
(对于内对)或;
(对于最后一对)来确定其结束。然后将名称提取到单独的数组d1
中,将值提取到另一个名为d2
的数组中。从字符串的开头删除第一个匹配项,并在循环中再转一圈,直到$input
字符串为空。当然,这两个数组中的元素都存储在单引号中,以便以后在查询中使用。
最后,我将两个数组(单独)与元素之间的逗号连接起来,并将它们放入名为$sql
的查询字符串中。
请注意(再次)以这种方式将数据直接从URI的GET参数发送到数据库而没有事先验证数据是危险的。
答案 2 :(得分:0)
不确定您的意思,但您可以使用str_replace()
来帮助您,或者您可以使用explode()
将其转换为数组,然后执行您需要处理的数据并将其放回原处使用implode()
将字符串转换为字符串。
编辑:谢谢,修复了混音。
答案 3 :(得分:-3)
echo "http://192.168.1.2/add.php?i=" . str_replace(",","&","mit=0106,22:5113/07/2016,liv=175cm,livp=000%,b=12.0V,t=36;");