我尝试使用php循环将数据(多条记录)插入到表中。
这段代码:
<?php
$array = array('blue','red','green','yellow','black','white','blue','green');
$array = array_values(array_unique($array)); // remove duplicate and re-index array also
$vals = array_count_values($array);
print_r($array);
?>
out out看起来像:
Array ( [0] => blue [1] => red [2] => green [3] => yellow [4] => black [5] => white )
现在我想用以下代码将输出插入到我的表(颜色)中:
<?php
for($i = 0; $i < count($vals); $i++){
$query = "INSERT INTO colours VALUES('$array[$i]');";
mysql_connect('localhost','root','');
mysql_query($query);
}
?>
我做错了什么?
答案 0 :(得分:2)
这里需要纠正几件事。第一个是解决您没有指定数据库的事实,如下所示:
$sql = "INSERT INTO colours (`color`) VALUES ('" . implode("'),('", $array) . "')";
mysql_query($sql, $conn);
我假设如果你已经创建了一个表,那么它必须存在于你已经创建的某个数据库中。
其次,我认为你的查询可能需要一些纠正。您没有为测试表指定任何列名。第三,您不应该在循环中运行查询。相反,您可以尝试使用单个请求构建一个执行多个插入的查询,如下所示:
onclick
对于特定用例的意图和目的,您甚至不需要循环结构,因为整个数组的值被内爆到一个字符串中以形成最终查询,如图所示。这将为您的所有颜色插入多行。对于超大型阵列,此策略可能不可取。我建议你单独查看如何使用MySQL / PHP使用单个查询进行多次插入。然后$ sql行可能对你更有意义。
第四,你未经编辑的原始问题使用了一个名为“test”的表格,所以我假设你不在生产环境中。无论如何,我建议为您的root管理员帐户设置密码,而不是将其留空。这只是一种很好的做法。
答案 1 :(得分:0)
你可能想要做一些类似的事情,指定你为颜色表插入的列名。
$conn = mysql_connect('localhost', 'root', '');
if (!$conn) {
die('Could not connect: ' . mysql_error());
}
for($i = 0; $i<$vals; $i++) {
$sql="INSERT INTO colors (Column_Name) VALUES ('$array[$i]');";
$result = mysql_query($sql);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
}
这应该让你走上正轨。
答案 2 :(得分:-1)
你可以不使用for循环来实现。
你的查询将是。
$array = array('blue','red','green','yellow','black','white','blue','green');
$array = array_values(array_unique($array));
$query = "INSERT INTO test VALUES ('".implode("'),('",$array)."');";
答案 3 :(得分:-1)
您的代码应该像
mysql_connect('localhost','root',''); //put this line at the start
mysql_select_db("your db name"); //and add this line after it
$array = array('blue','red','green','yellow','black','white','blue','green');
$array = array_values(array_unique($array)); // remove duplicate and re-index array also
$arr_str = implode("'),('",$array);
$sql_query = "INSERT INTO `test` (`colours`) VALUES ('".$arr_str."')";
mysql_query($sql_query);