我试图使用PHP将未知数量的行插入MySQL。这是它应该如何工作:
Javascript解析HTML DOM以基于css类创建多维数组。该数组将具有一定数量的行(或子数组),这些行(或子数组)对应于具有该类的元素的数量。 (这可以是0或更大的任何整数......显然)。
然后,在JavaScript事件中,数组被发送到PHP脚本。
PHP脚本会将数组中的数据插入MySQL。
我的问题是我不知道如何告诉我的PHP脚本数组中有多少个值。而且我不知道如何编写mysql_query()而不知道应该插入的值(或行)的数量。
答案 0 :(得分:3)
您可以一次向MySQL插入多行:
INSERT INTO table1 (column1, column2, ...) VALUES (value_col1, value_col2), (value2_col1, value2_col2), ...;
在PHP中,您可以通过循环遍历行并将它们添加到SQL字符串来构建查询:
$sql = "INSERT INTO table1 (col1, col2) VALUES ";
foreach($rows as $i=>$row) {
if ($i>0) {
$sql .= sprintf(",(%s,%s)", $row["col1_value"], $row["col2_value"]);
} else {
$sql .= sprintf("(%s,%s)", $row["col1_value"], $row["col2_value"]);
}
}
mysql_query($sql);
您必须确保根据实际插入的内容正确转义值。
答案 1 :(得分:1)
为什么不用这样的css类标识符进行搜索时准备二维数组呢?
//This is jquery code - you can write javascript to do the same
$(`.class`).each(function(i,e){resultsArray.push($(this).val());});
这将使您免于在后端遍历多维数组的麻烦,您只需在PHP代码中执行count()
并执行以下查询准备。
查询准备
假设你有一个二维数组,你可以使用这样的批量插入查询: -
INSERT INTO tablename (a,b)
VALUES
('1', 'one'),
('2', 'two'),
('3', 'three')
使用PHP动态准备查询 -
$counter = 0;
$valuesPart = NULL;
foreach($_POST as $each)
{
if($counter > 0)
$appendComma = ",";
else
$appendComma ="";
$valuesPart .= $appendComma."(".$each['key1'].",".$each['key2'].")";
$counter++;
}
if(!empty($valuesPart))
$mysql_query = "INSERT INTO tablename (a,b) VALUES ".$valuesPart;
因此,您不需要知道实际插入了多少结果。
如果你继续使用多维数组,你可能需要编写或搜索代码来遍历多维数组,这可能涉及递归和许多复杂的代码。将会有很多错误的机会,它会更慢(可能很少但有限的数量是不必要的)。
答案 2 :(得分:1)
所以我假设数组通过$ _POST或其他方式成功进入PHP?如果您不确定,那么请执行var_dump或echo_r,以便我们看到。
编辑 - 哇我把explode
放在implode
几次的位置。固定的。
假设它是,并且每个'sub'数组是形式
的关联数组[0]
'id' => 1
'name' => 'Billy'
'DOB' => .....
[1]
etc.
构建插入所有行的单个查询的代码,例如INSERT INTO table ('f1','f2',f3') VALUES ('v11', 'v22', 'v33'), ('v21', 'v22', 'v23'), ......
$escapeAndQuote = function($x) {return "'".mysql_real_escape_string($x)."'";};
$rowwise = function($x) {return '('. implode(', ', array_map($escapeAndQuote, $x)) .')';
$fieldString = $rowwise(array_keys($arr[0]));
$valString = implode(', ', array_map($rowwise, $arr));
$sql = "INSERT INTO table $fieldString VALUES $valString";
mysql_query($sql, $conn);
答案 3 :(得分:0)
使用foreach循环遍历数组。
// Example:
foreach($submitted_array as $insert_array)
{
//php and mysql insert query here
}
或许准备好的陈述可以帮助您完成工作。基本上,您将声明一个通用的insert语句,然后将值“绑定”到每个输入。阅读更多on PHP PDO Prepared Statements。