Php多维数组/ MySql问题

时间:2009-12-01 08:50:57

标签: php mysql

我正在尝试编写一个php脚本,它将文本文件分解为内容并将其插入到MySql数据库中,代码如下:

$file = "my_file.txt";

$db = "db_name";

$link = mysql_connect("localhost","root"); 

if(!$link)  die("Connection Failed");    

mysql_select_db($db) or die("Could not open $db: ".mysql_error()."<br />");

$fp = fopen($file, 'r') or die("Could not open file");
$my_filesize = filesize($file);

while(!feof($fp)) {
  $prod_doc.=fread($fp, $my_filesize); // store the file in a variable
} 

$prod_array = explode("~",$prod_doc);   // create a array with the explode function

for($i=0; $i<count($prod_array); $i++){
  $prod_items[$i] = explode(',', $prod_array[$i]);   // create a malti-dimensional array 
}

$query = "INSERT INTO my_table(feild1, feild two, feild three)
          VALUES ('$prod_items[$i][0]','$prod_items[$i][1]','$prod_items[$i][2]')
         ";

$result = mysql_query($query);

if(!$result) die(mysql_error());            

$result = mysql_affected_rows($result);

echo $result;

mysql_close($link); `

我的问题是:Array [0],Array [1],Array [3]是输入数据库而不是我的数据。在此先感谢,欢呼。

4 个答案:

答案 0 :(得分:2)

要访问双引号字符串中使用的数组变量元素值,需要使用大括号分隔符:

"'{$prod_items[$i][0]}','{$prod_items[$i][1]}','{$prod_items[$i][2]}') ";

另一种编码方式是连接(在这种情况下,您不需要额外的分隔符):

"'" . $prod_items[$i][0] . "','" . $prod_items[$i][1] . "','" . $prod_items[$i][2] . "') ";

不要忘记,如果输入数据不可预测,您需要过滤掉可能会破坏续集或危及安全原则的字符。见How can I prevent SQL injection in PHP?

另外,junmats的评论是正确的,你只是在for循环之外运行查询,这是没有意义的。

答案 1 :(得分:1)

你也必须遍历你的$ prod items数组,然后连接值

$insert = array();
for($i=0; $i<count($prod_array); $i++){
  $prod_items[$i] = explode(',', $prod_array[$i]);   // create a malti-dimensional array
  $insert[] = '( ' .$prod_items[$i][0]. ', '.$prod_items[$i][1]. ', '. $prod_items[$i][3] .')';
}

$insert_string = implode(', ', $insert);

$query = "INSERT INTO my_table(feild1, feild two, feild three)
          VALUES" . $insert_string;

你应该使用foreach insted for。

答案 2 :(得分:0)

好像你已经跳过了一些代码。 爆炸后你将拥有一系列字符串,而不是二维数组。 此外,最好更新一下代码。

$query = "INSERT INTO my_table(feild1, feild_two, feild_three) VALUES ('".$prod_items[$i][0]."','".$prod_items[$i][1]."','".$prod_items[$i][2]."') ";

答案 3 :(得分:0)

您应该使用标准串联(。)技术。 PHP只能评估字符串中的简单变量:

“$ var” - &gt; var被评估 “$ var-&gt; var” - &gt;没有评估 “$ var [0]” - &gt;没有评估

$query = "INSERT INTO my_table(feild1, feild two, feild three)
          VALUES ('".$prod_items[$i][0]."','".$prod_items[$i][1]."','".$prod_items[$i][2]".')
       ";