表单提交的值存储在$ array中。
$array= array("123","James","New York");
MySQL表(客户)
ID-----NAME-----CITY
我是PHP的新手。我希望将数组数据插入到MySQL表的相关列中。
mysql_query("INSERT INTO customer (ID,NAME,CITY)
VALUES ('123','James','New York')" );
可以使用但是每个表单提交中数组元素的数量都可以更改。
如何使用 PHP ?
进行操作注意:
在选择的表格页面中,用户从下拉菜单中选择表格,然后加载自定义表格。因此列名取决于用户选择的表。我可以在“$ array”中获取表单中提交的值。但问题是每次都会改变数值。
mysql_query(INSERT INTO客户VALUES($ array)); //无法使用此格式
选择表格代码
<?php
include("functions.inc");
connectDatabase();
$queryseltable= "SHOW TABLES" or die("error query");
$result=mysql_query($queryseltable);
?>
<link href="style.css" rel="stylesheet" type="text/css" />
<form action="process.php" method="post">
<div id="wrapper">
<table>
<tr>
<td id="right">Select Table:</td>
<td id="input">
<select name="table">
<?php
while($row=mysql_fetch_array($result)){
extract($row);
echo "<option>".$Tables_in_database ."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Select" /></td>
</tr>
</table>
</div>
</form>
<?php
?>
Process.php代码
<link href="style.css" rel="stylesheet" type="text/css" />
<form action="insert.php" method="post">
<?php
include("functions.inc");
connectDatabase();
$table= $_POST['table'];
$_SESSION['table'] = $table;
$query= "SELECT * FROM $table";
$result= mysql_query($query) or die("query failed");
$count=mysql_num_fields($result);
$fieldname = mysql_field_name($result, 0);
?>
<div id="wrapper">
<table>
<?php
for($x=0; $x<$count;$x++){
$fieldname = mysql_field_name($result, $x);
echo "
<tr>
<td id=\"right\">$fieldname</td>
<td id=\"input\"><input type=\"text\" name=\"test[]\" /></td>
</tr>
";
}
?>
<tr>
<td></td>
<td><input type="submit" value="Insert" /></td>
</tr>
</table>
</div>
</form>
答案 0 :(得分:9)
使用PDO预处理语句,如下所示:
$pdo = new PDO($dns); // where $dns is your connection string
$q = $pdo->prepare('INSERT INTO customer (ID, NAME, CITY) VALUES (?, ?, ?)');
$q->execute(array("123","James","New York"));
阅读有关PDO的here
<强>更新强>
如果你真的需要这个,你可以通过POST传递数组,比如
<form>
<input type="hidden" name="table[column1]" value="value1" />
<input type="hidden" name="table[column2]" value="value2" />
...
<input type="hidden" name="table[columnN]" value="valueN" />
</form>
使用命名列,因为当您知道列是什么时会生成表单。
在PHP中你会得到:
$array = $_POST['table'];
// Now, $array === array('column1' => 'value1', 'column2' => 'value2', ..., 'columnN' => 'valueN');
你可以这样做:
$pdo = new PDO($dns); // where $dns is your connection string
$q = $pdo->prepare(sprintf(
'INSERT INTO customer (%s) VALUES (%s)',
implode(', ', array_keys($array)), // column names separated by ', '
implode(', ', array_fill(0, count($array), '?')) // ? marks for placing values
));
$q->execute($array);
希望能帮到你一些方法。 但是应该知道这种方式是不确定的,请不要这样,直到你真正需要它
答案 1 :(得分:2)
$insert = null;
foreach($array as $pos => $value) {
$mysql_value = mysql_real_escape_string($value, $your_mysql_connection);
$insert_query = ($pos > 0 ? ',', '').'\''.$mysql_value.'\'';
}
mysql_query('INSERT INTO customer (ID,NAME,CITY)
VALUES ('.$insert_query.')' );
答案 2 :(得分:2)
说你可以使用 array_keys():
array array_keys ( array $input [, mixed $search_value = NULL [, bool $strict = false ]] )
获取数组键,它应该与表中的字段名称相对应,
然后使用 implode()
string implode ( string $glue , array $pieces )
将键数组转换为字符串,然后将原始数组转换为字符串以获取字段值,如下所示:
$myArray = array('A', 'B', 'C');
echo "'" . implode("','", $myArray) . "'"; //Displays 'A', 'B', 'C'
然后将其插入您的查询中:
mysql_query("INSERT INTO customer ($keys)
VALUES ($values)" );
答案 3 :(得分:2)
那太傻了。数组元素的数量如何变化?如果它是一个表单,那么它有一个静态的字段数。每个字段都可以/应该对应于MySQL中的一列。如果您并不总是需要所有列,则可以将其默认值设置为NULL
,然后在插入时省略该列。
说你有桌子:
id
name
city
email
favorite_pie
如果这些列设置为ALLOW NULL
,则可以运行以下插入:
INSERT INTO customer (id,name,city) VALUES ('123','James','New York');
INSERT INTO customer (id,name,email) VALUES ('234','John','foo@bar.com');
INSERT INTO customer (id,email,favorite_pie) VALUES ('345','Carl','Cherry');
所有省略的字段都将设置为NULL。
但是如果您需要来存储数组,您始终可以将其序列化并将其存储为文本。您可以在PHP中执行以下操作:
serialize(array("123","James","New York"));
这将产生以下字符串:
a:3:{i:0;s:3:"123";i:1;s:5:"James";i:2;s:8:"New York";}
您可以将该字符串保存在text或varchar字段中。检索后,您可以像这样反序列化以获取数组:
$myArray = unserialize($theString);
希望有所帮助
答案 4 :(得分:1)
如果您确定数组与列匹配,可能是这样的:
// The array previously filled somewhere above, having currently these values
$array = array("123","James","New York");
// Escaping values
for($i = 0; $i < count($array); $i++)
$array[$i] = "'{$array[$i]}'";
mysql_query("INSERT INTO customer (ID,NAME,CITY)
VALUES (" . implode(', ', $array) . ")" );
但是,这可能会导致安全问题。
答案 5 :(得分:1)
您可以循环遍历数组,如下所示: -
$array= array("123","James","New York");
for ($i = 0; $i < 25; $i++)
{
$id = $array[$i][5];
$name = $array[$i][10];
$city = $array[$i][13];
// Run query using the variable values rather than the array values.
mysql_query("INSERT INTO customer (ID,NAME,CITY)
VALUES ($id,$name,$city)" );
}