Php 根据需要裁剪阵列
我想将数组值写入数据库,如下所示: “更新tbl集合$fieldname=$fieldvalue,其中id=$recid” 我从Php 根据需要裁剪阵列,php,arrays,foreach,Php,Arrays,Foreach,我想将数组值写入数据库,如下所示: “更新tbl集合$fieldname=$fieldvalue,其中id=$recid” 我从$\u POST['changed']中得到这个数组: [changed] => Array ( [0] => Array ( [recid] => 1 [vorname] => Walter
$\u POST['changed']
中得到这个数组:
[changed] => Array
(
[0] => Array
(
[recid] => 1
[vorname] => Walter
[nachname] => Bauer
)
[1] => Array
(
[recid] => 2
[vorname] => Michael
)
[2] => Array
(
[recid] => 3
[vorname] => Peter
[nachname] => Highler
[email] => p.highler@aol.com
)
[3] => Array
(
[recid] => 4
[vorname] => Maria
[nachname] => Maier
)
[4] => Array
(
[recid] => 5
[vorname] => Werner
[nachname] => Rock
)
)
当我使用这个foreach
循环时,recid
get也作为字段名-但这不应该发生
foreach ($_POST['changed'] as $SubArray)
{
foreach ($SubArray as $key => $value)
{
$sql .= "UPDATE kunden SET ".$key."='".$value."' WHERE id=**?????????**";
}
}
试试这个:
foreach ($_POST['changed'] as $SubArray) {
foreach ($SubArray as $key => $value) {
if ($key === 'recid') continue;
$sql = "UPDATE kunden SET $key = $value WHERE id = '$SubArray[recid]'";
}
}
此代码不适用于生产。必须转义每个$\u POST
变量或使用PDO占位符。更新(PDO占位符示例): 只需使用:
if ($key === 'recid') continue;
$sql .= "UPDATE kunden SET ".$key."='".$value."' WHERE id='".$SubArray['recid']."'";
而不是
$sql .= "UPDATE kunden SET ".$key."='".$value."' WHERE id=**?????????**";
您的SQL查询可用于SQL注入。看@Joren我知道但现在,我明白了,并且我理解并从我的问题中学到了我使用了这个字符串。您也使用
$sql.=
将结果分组为一个字符串,如果您使用的是旧的和不推荐的mysql.*
库,它将不起作用,因为它每次只执行一个查询。@我有$sql.=
将其写入一个字符串txt文件首先检查数组和foreach循环是否正常工作。另外,如果所有3个字段都存在,您将生成3个查询,您可以通过一个简单的检查来更新所有字段,仅附加当前字段。谢谢您的解决方案这是我问题的答案。还可以向用户写入PDO占位符。但不可能对表列使用占位符。例如,我不知道列名。是否也可以创建动态安全的PDO语句/占位符解决方案?很抱歉,我发现了错误-我有以下错误:$sql=“UPDATE kunden SET$key=”:value“WHERE id=:recid”代码>在删除'
和'
之前和之后:value'它现在对我起作用了。这是否也意味着,:value
是字符还是整数无关紧要?我尝试了,添加了一个新列“age”,并将其设置为“int(11)”。我将$sql打印到一个txt文件中,只得到UPDATE kunden SET age=:value,其中id=:recid
-缺少:value
和:recid
的值,并且数据库中的字段没有更新。$sql不是真正执行的查询。您可以在mysql服务器中启用查询日志,以检查执行的确切内容,或者在mysql客户端键入show full processlist
中进行检查。或者在这里检查:这是不可能的,因为我从phpmyadmin#1227-访问被拒绝;您需要此操作的超级权限
,而我在服务器上没有root权限。是否有其他解决方案-可能将执行的查询也打印到txt文件中?
$sql .= "UPDATE kunden SET ".$key."='".$value."' WHERE id=**?????????**";
foreach ($_POST['changed'] as $SubArray)
{
$id = $subArray['recid'];
$values = array();
foreach ($SubArray as $key => $value)
{
if($key != 'recid')
{
$values[] = $key . '=' . $value;
}
$sqlValues = implode(', ', $values);
}
$sql = "UPDATE kunden SET " . $sqlValues . " WHERE id='" . $id . "'";
//execute query here
}