Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在PDO/SQL中使用变量数进行更新:)_Php_Sql_Variables_Pdo - Fatal编程技术网

Php 在PDO/SQL中使用变量数进行更新:)

Php 在PDO/SQL中使用变量数进行更新:),php,sql,variables,pdo,Php,Sql,Variables,Pdo,我有一个检索表单中发送的所有输入数据的代码。如果表单只填写了2个字段,PHP只会获取这2个字段的值(表单中未更改的字段不会提交) 然后,我想为我用PHP代码检索到的那些字段更新一个SQL表。这就是我迷路的地方。我需要在SQL中只指定从表单接收的字段,但这是可变的。也许我只收到了1个字段,也许我收到了7个字段 这是我的密码: if (isset($_POST) && !empty($_POST)) { echo $internalImage; foreach ($_POST a

我有一个检索表单中发送的所有输入数据的代码。如果表单只填写了2个字段,PHP只会获取这2个字段的值(表单中未更改的字段不会提交)

然后,我想为我用PHP代码检索到的那些字段更新一个SQL表。这就是我迷路的地方。我需要在SQL中只指定从表单接收的字段,但这是可变的。也许我只收到了1个字段,也许我收到了7个字段

这是我的密码:

if (isset($_POST) && !empty($_POST))  {
echo $internalImage;

foreach ($_POST as $key => $value) 
    {
 echo "Field Name: ".htmlspecialchars($key)." | Value: ".htmlspecialchars($value)."<br>";
    }
}
if(isset($\u POST)和&!empty($\u POST)){
回波图像;
foreach($\发布为$key=>$value)
{
echo“字段名:.htmlspecialchars($key)。”值:“.htmlspecialchars($Value)。”
”; } }

您有什么建议?

您可以这样构造查询:

$values=array();

//this will be an array of possible fields that are in your table
$possible=array('field1', 'field2', 'field3');

$i=0;
$len=count($_POST);
$query='update table_name set ';
foreach($_POST as $key => $value){
  $k=htmlspecialchars($key);
  $v=htmlspecialchars($value);
  if(in_array($k, $possible)){
    $query .= $k .' = ?'; //placeholder for a value
    $values[]=$v;  //append values to an array for later use
    if($i < ($len-1)) $query .= ', ';
    $i++;
  }
}
$query .= 'where table_id = ?';
$values[]=$table_id; //forgot that, append id of a row you are to update.

实际上,列名是表单中输入字段的名称,因此没有人可以手动更改它。这些字段的命名方式与表中列的命名方式相同…我相信任何孩子都可以使用Firefox更改表单中某个字段的名称并发布。除了在
foreach
中没有更多结果外,我如何为多个集合添加
&
,我将第二次编辑,重点关注一个解决方案,
“=?”
的结尾不应该有逗号,以便其他字段也可以更新吗?问题将是最后一个应被抑制的逗号:)在a中,这项任务有一个完整的解决方案。顺便说一下,任何SQL部件都不应该有任何htmlspecialchars。
$db->prepare($query);
$db->execute($query, $values);