Php 如何以数组中传递的列名为目标来构造DB查询
我希望这有点道理,我已经使用这段代码好几天了,现在感觉有点沮丧 我有一个庞大的表单,它将大量信息传递到数据库中,表单的一个组成部分涉及文件上传 我正在创建一个名为uploads的数组,并从数据库中传递列名,希望可以使用它们生成一个查询,自动将收到的任何信息输入到相应的列中 下面是我的字段的代码示例:Php 如何以数组中传递的列名为目标来构造DB查询,php,mysql,arrays,Php,Mysql,Arrays,我希望这有点道理,我已经使用这段代码好几天了,现在感觉有点沮丧 我有一个庞大的表单,它将大量信息传递到数据库中,表单的一个组成部分涉及文件上传 我正在创建一个名为uploads的数组,并从数据库中传递列名,希望可以使用它们生成一个查询,自动将收到的任何信息输入到相应的列中 下面是我的字段的代码示例: <label>Upload copy front page of contract and relevant special condition(s)</label>
<label>Upload copy front page of contract and relevant special condition(s)</label>
<input type="file" name="upload[UploadCopyContr]" value="<?php echo $out['UploadCopyContr']?>" />
那么,如何从数组中提取列名并将其放入变量中呢?如果我使用var_dump($_文件[“上载]);我得到以下回应
["name"]=> array(4) { ["UploadCopyExtr"]=> string(9) "test2.pdf" ["UploadCopyContr"]=> string(9) "test1.pdf" ["UploadCopyTaxDesigLttr"]=> string(0) "" ["UploadOthTaxDesigDoc"]=> string(0) ""
所以我知道数组中有值,我只是不知道如何定位它们
我可以使用$_文件[“uploads”][“uploadCopyExtra”],但这对动态生成的查询没有好处
这是我的文件上传代码-这是完美的工作
$path = 'uploads/';
foreach ($_FILES["upload"]["error"] as $key => $error)
{
$tmp_name = $_FILES["upload"]["tmp_name"][$key];
{
if (!$tmp_name) continue;
}
$name = $_FILES["upload"]["name"][$key];
if ($error == UPLOAD_ERR_OK)
{
// Check if directory exists and create it if not.
if(!is_dir($path . $_POST["AccountID"] ."/". $_POST["PropertyID"])) {
mkdir($path . $_POST["AccountID"] ."/");
mkdir($path . $_POST["AccountID"] ."/" . $_POST["PropertyID"] ."/");
}
if (move_uploaded_file($tmp_name, $path . $_POST["AccountID"] ."/". $_POST["PropertyID"] ."/".$name))
$uploaded_array[] .= "Uploaded file '".$name."'.<br/>\n";
else
$errormsg .= "Could not move uploaded file '".$tmp_name."' to '".$name."'<br/>\n";
}
else $errormsg .= "Upload error. [".$error."] on file '".$name."'<br/>\n";
}
$path='uploads/';
foreach($_文件[“上载”][“错误”]为$key=>$error)
{
$tmp_name=$_文件[“上载”][“tmp_名称”][$key];
{
如果(!$tmp_name)继续;
}
$name=$_文件[“上载”][“名称”][$key];
如果($error==UPLOAD\u ERR\u OK)
{
//检查目录是否存在,如果不存在,则创建它。
如果(!is_dir($path.$\u POST[“AccountID”]。“/”$\u POST[“PropertyID”])){
mkdir($path.$\u POST[“AccountID”]。“/”);
mkdir($path.$\u POST[“AccountID”]。“/”$\u POST[“PropertyID”]。“/”);
}
如果(移动上传的文件($tmp\u name,$path.$\u POST[“AccountID”]。“/”$\u POST[“PropertyID”]。“/”$name))
$uploaded_array[]。=“上传的文件”.$name.“。
\n”;
其他的
$errormsg.=“无法将上载的文件”'.$tmp_name.“'移动到”'.$name.“'
\n”;
}
else$errormsg.=“上传错误。[.$error.]在文件“.$name.”“
\n”上;
}
我没有包括我的查询示例,因为我在这方面没有问题,我只想知道如何动态地定位那些列名,请原谅,如果2是内在链接的,我很乐意提供所需的任何信息。使用数组键获取数组的键。还可以使用内爆将键组合到查询的一部分中。基本上:
$columns = implode( ', ', array_keys( $array ) );
// This nets you 'ColumnName1, ColumnName2, Etc, Etc2'
值也是一样的。然后将这些字符串插入查询中
但是,请确保您能够处理DB向您抛出的任何错误以及插入其中的屏幕值
最终用户可以操作表单HTML,并修改将插入查询中的列名。您能提供一个实际的示例来说明您想要实现的目标吗?现在还不太清楚动态定位列名的
是什么意思。我感兴趣的是如何清理来自客户端的列名。。。。忘了添加,编程懒散会带来evil@itachi我不确定是否需要清理客户端的列名,我正在使用PDO,因此如果传递的任何列名在数据库中不存在,它只会停止查询,最糟糕的情况可能是部分插入。如果我错了,请告诉我,即使在PDO中,您也不能参数化Clunn名称。因此,您将对任何SQL注入敞开大门。
$columns = implode( ', ', array_keys( $array ) );
// This nets you 'ColumnName1, ColumnName2, Etc, Etc2'