gpt4 book ai didi

PHP - SQL 语句中的多个变量用法

转载 作者:行者123 更新时间:2023-11-29 02:14:11 25 4
gpt4 key购买 nike

我有一个项目,我要使用 PHP 和 HTML 表单将一个大型 CSV 文件(200 个字段)上传到数据库中。在一些帮助下,我终于让它工作了,它将所有 200 个字段提交到 MySQL Workbench 中的一个暂存表中,这是我最大的障碍。我已经设置了我的代码来拆分元素,将一些元素放在一个表中,一些放在另一个表中,最多 7 个表。我目前的问题是我们有一些重复。即,“meters”表和“costs”表有很多相同的变量。我在 PHP 中创建了一个列数组,列出了所有 200 个变量,并为每个数据库表创建了 7 个表数组。如果我注释掉除“暂存”表(每个变量只使用一次)之外的所有内容,它会正常提交并且我可以在 MySQL WB 中看到数据。但是,当我删除注释并为所有 7 个表(多次使用某些变量)运行语句时,不会插入任何内容。难道不能在 PHP 中运行一条 SQL 语句来插入多个表,尤其是多次使用变量吗?

代码示例:

$file = $_FILES['file']['tmp_name'];
$handle = fopen($file, "r");
$filesop = fgetcsv($handle, 0, ",");

$coldata = array();

$coldata['orderNumber'] = $filesop[0];
$coldata['place'] = $filesop[1];
$coldata['workOrderNum'] = $filesop[2];
$coldata['lowSideMIUNum'] = $filesop[3];
$coldata['highSideMIUNum'] = $filesop[4];
$coldata['accountNum'] = $filesop[5];
$coldata['custName'] = $filesop[6];
$coldata['address'] = $filesop[7];

$table_cols = array();

/*staging*/
$table_cols[0] = 'orderNumber,place,workOrderNum,lowSideMIUNum,highSideMIUNum'
/*clients*/
$table_cols[1] ="orderNumber,place,workOrderNum,lowSideMIUNum"
/*meters*/
$table_cols[2] ="workOrderNum,lowSideMIUNum,highSideMIUNum,accountNum"


$tablenames = array("staging","clients","meters");

for($tableno = 0;$tableno < sizeof($tablenames);$tableno++){
$q = "";
$col_list = '`'.str_replace(',','`,`',$table_cols[$tableno]).'`';
$q .= "INSERT INTO ".$tablenames[$tableno]." (".$col_list.") VALUES (";
$cols = explode(",",$table_cols[$tableno]);
$data = array();
foreach($cols as $key => $fldname) {
$data[] = "'".$coldata[$fldname]."'";
}

$q .= implode(",",$data).");";

echo "<p>\$q:<pre>".print_r($q,true)."</pre></p>\n";
}
if(mysqli_query($connect, $q)) { echo'File submitted'; } else { /*var_dump($q)*/echo "Error: " . mysqli_error($connect); }

最佳答案

您不能使用 mysqli_query 运行整批查询。试试 mysqli_multi_query()

我有一个其他人发现有用的可靠代码块:Strict Standards: mysqli_next_result() error with mysqli_multi_query

针对您的情况:

if(mysqli_multi_query($connect,$q)){
do{
$cumulative_rows+=mysqli_affected_rows($connect);
} while(mysqli_more_results($connect) && mysqli_next_result($connect));
}
if($error_mess=mysqli_error($connect)){
echo "Syntax Error: $error_mess";
}elseif($cumulative_rows!=sizeof($tablenames)){
echo "Logic Error";
}

如果您想对查询的成功/失败反馈进行个性化设置,请参阅我上面的链接,了解有关将查询声明为数组元素并回显结果的说明。

关于PHP - SQL 语句中的多个变量用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43059393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com