2014-10-20 67 views
0

我正在尝试使用名为$title的数组中的字符串填充SQL表。
这是我的PHP代码:为什么我的PHP foreach循环只向SQL插入一个值?

// To store the values to insert into the database tables. 
$cid = 0; // Primary key. 
$dates = array(); 
$number = array(); 
$title = array("aaa", "bbb", "ccc"); 
$description = array(); 

// For connecting to database. 
$user = 'root'; 
$pass = ''; 
$db = 'contractsdb'; 

// Assign HTML file contents to $content. 
$content = file_get_contents('C:\xampp\htdocs\HTMLParser/tester.html'); 

// Load HTML page into Document Object Model for parsing HTML. 
$dom = new DOMDocument;  
$dom->loadHTML($content); 

// Connect to DB and check connection. 
$con=mysqli_connect("localhost", "$user", "$pass", "$db"); 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

// Insert the values into the database contracts table. 
foreach ($dom->getElementsByTagName('a') as $link) { 
    $sql = "INSERT INTO contracts (CID, TITLE) 
          VALUES ('$cid', '$title[$cid]')"; 
    echo "1 record added<BR>"; 
    $cid++; 
} 

// Error message if fail. 
if (!mysqli_query($con, $sql)) { 
    die('Error: ' . mysqli_error($con)); 
} 

// Close connection to database. 
mysqli_close($con); 

当我运行通过XAMPP这个代码,看看表,我得到这个:
enter image description here
正如你所看到的,只有一行添加 。我错过了什么?
语法错误foreach

HTML页面打印出3个“1记录添加”,为什么不包含3行?

回答

2

您在每个循环中覆盖了$sql变量。

$sql = 'INSERT INTO contracts (CID, TITLE) VALUES '; 

foreach ($dom->getElementsByTagName('a') as $link) { 
    $sql .= "($cid, '$title[$cid]'),"; // $cid is INT, so don't use quotes, in the second case you should you real_escape_string. 
    $cid++; 
} 

if (!mysqli_query($con, rtrim($sql, ','))) {...} 
+0

好的,谢谢。我现在看到我的错误。 :) – 2014-10-20 10:59:03

2

一切都很好。

正如你所看到的,你在foreach循环中有回声,但在外循环中有mysqli_query。所以你只执行一条语句:

INSERT INTO contracts (CID, TITLE) VALUES (2, 'ccc')